模块化开发 #

特别注意

以下的模块化配置必须在 appsettings.json 下配置才有效,原因是启动的时候 appsettings.json 已经加载,自定义配置文件还未加载。

关于模块化开发 #

模块化是代码的组成的一种方式,模块化系统就像乐高玩具一样,一块一块零散积木堆积起一个精彩的世界。每种积木的形状各不相同,功能各不相同,积木与积木直接互相依赖,互相支撑。

模块化开发好处 #

模块化开发能够将不同的功能组装在一起,实现功能的累加,诸多功能组装在一起,最终形成项目。

模块分类 #

  • 应用程序模块:通常这类模块是完整的应用程序,可以独立运行,有自己的实体、服务、API 及 UI 组件等。
  • 框架级模块:这类通常是解决某个业务功能进行开发的模块,比如上传文件、分布式缓存、数据验证等。

如何进行模块化开发 #

Mall3s 框架设计之初就考虑到模块化开发,所以从最初版本就具备此功能。启用 Mall3s 模块化支持非常简单。

启用模块化支持 #


 
 
 




{
  "AppSettings": {
    "EnabledReferenceAssemblyScan": true,    // 启用模块化程序集扫描
    "SupportPackageNamePrefixs": ["Module1", "Module2",...] // 配置通过 Nuget 方式安装的模块化包,如果不是通过 Nuget 方式可不配置
    // "ExternalAssemblies": ["plugins/Module1.dll", "plugins/Module2.dll", ...]   // 配置加载网站 plugins 目录下的模块程序集,可不配置
  }
}

各种添加模块配置方式 #

添加模块到现有的应用中有多种方式:

  1. 直接通过项目添加模块化引用或编辑 .csproj 添加模块

这种方式无需任何配置,Mall3s 框架可自动加载模块。

  1. 通过添加 .dll 方式引用模块

需要配置 EnabledReferenceAssemblyScan 节点,如:



 



{
  "AppSettings": {
    "EnabledReferenceAssemblyScan": true
  }
}
  1. 通过 Nuget 方式安装模块

如果通过 Nuget 方式安装模块,需要配置 SupportPackageNamePrefixs 节点,如:



 



{
  "AppSettings": {
    "SupportPackageNamePrefixs": ["Nuget包名称", "Nuget包名称",...]
  }
}
  1. 通过动态加载 .dll 方式安装模块

这种方式通常是在网站创建一个文件夹放入模块化 .dll 文件,如:plugins,无需添加引用可自动加载。



 



{
  "AppSettings": {
    "ExternalAssemblies": ["plugins/Module1.dll", "plugins/Module2.dll", ...]
  }
}

特别注意

如果非生产环境,那么 plugins 文件夹放在 bin\Debug\net n.0\bin\Release\net n.0 目录下。

如果是生产环境,则直接放在根目录即可。

模块化开发注意事项 #

  • 尽可能保证每个模块都有独立的路由地址格式:/模块化名称/路由地址,这样才能保证不会和现有的系统出现冲突。
  • 开发模块化是尽可能设计为完全独立的引用,如果需要包含 UI 元素如视图、html/cs/javascript 应采用嵌入式方式
  • 模块化开发如果需要添加第三方服务,应配置在 AppStartup 的派生类中。
  • 模块化的所在程序集的注释文件 .xml 需放在和 .dll 同级目录
上次更新: 3/10/2023, 5:33:48 PM