(给DotNet加星标,提升.Net技能)
转自:喻平勇 cnblogs.com/yupingyong/p/12447585.html
前言
先简单介绍下项目(由于重新基于模块化设计了整个项目,所以目前整个项目功能不多)
1、Asp.Net Core 3.1.2+MSSQL2019(LINUX版)
2、中间件涉及Redis、RabbitMQ等
3、完全模块化的设计,支持每个模块有独立的静态资源文件
github开源地址:https://github.com/yupingyong/mango
上一张项目结构图:
上图中 Modules目录下放的项目的模块
Mango.WebHost 承载整个项目运行
Mango.Framework 封装整个项目模块化核心
下面我会分享实现模块化的几个核心要点,更详细的我会在后续的博文中陆续发布.
框架如何去加载所写的模块这是最核心的问题之一,好在Asp.Net Core MVC为模块化提供了一个部件管理类
Microsoft.AspNetCore.Mvc.ApplicationParts.ApplicationPartManager
它支持从外部DLL程序集加载组件以及组件的管理.不过要从外部组件去获取哪些是组件我们需要借助一个工厂类ApplicationPartFactory,这个类支持从外部程序集得到对应的控制器信息,核心代码如下:
///
/// 向MVC模块添加外部应用模块组件
///
///
///
private static void AddApplicationPart(IMvcBuilder mvcBuilder, Assembly assembly){
var partFactory = ApplicationPartFactory.GetApplicationPartFactory(assembly);
foreach (var part in partFactory.GetApplicationParts(assembly))
{
mvcBuilder.PartManager.ApplicationParts.Add(part);
}
var relatedAssemblies = RelatedAssemblyAttribute.GetRelatedAssemblies(assembly, throwOnError: false);
foreach (var relatedAssembly in relatedAssemblies)
{