Maomi.Core模块化自动服务注册框架,好用吗?
摘要:目录Maomi.Core快速入手模块模块使用依赖注入ModuleCore 抽象类自定义模块配置模块加载循环依赖检测模块初始化顺序服务自动注册 项目地址:https:github.comwhuanlemaomi 文档地址:https:
目录Maomi.Core快速入手模块模块使用依赖注入ModuleCore 抽象类自定义模块配置模块加载循环依赖检测模块初始化顺序服务自动注册
项目地址:https://github.com/whuanle/maomi
文档地址:https://docs.whuanle.cn/zh/maomi_framework/start/1.module
Maomi.Core
Maomi.Core 是一个模块化和自动服务注册包,以简单和便捷的方式实现项目模块化和注册服务配置。Maomi.Core 是一个很简洁的包,可以在控制台、Web 项目、WPF 项目等项目中使用,在 WPF 项目中结合 MVVM 可以大量减少代码复杂度,让代码更加清晰明朗。
基于 ASP.NET Core 开发的 Web 框架中,最著名的是 ABP,ABP 主要特点之一开发不同项目(程序集)时,在每个项目中创建一个模块类,程序加载每个程序集中,扫描出所有的模块类,然后通过模块类作为入口,初始化程序集。
使用模块化开发程序,好处是不需要关注程序集如何加载配置。开发人员开发程序集时,在模块类中配置如何初始化、如何读取配置,使用者只需要将模块类引入进来即可,由框架自动启动模块类。
开始顺序实例初始化所有模块类。
首先扫码模块所在的类型,把所有模块的类型扫描后,扫描每个类型时,都会出发模块所在的类型过滤器。
快速入手
创建 Demo1.Api、Demo1.Application 两个项目,在 Demo1.Application 在中引入最新的 Maomi.Core 包。
每个项目都应该有一个模块类,分别创建 ApplicationModule.cs、ApiModule.cs,模块类需要实现 IModule 接口。
Demo1.Application 项目的 ApplicationModule.cs 文件内容如下,其构造函数注入了 IConfiguration,模块类中可以使用依赖注入,可以注入一些 WebApplicationBuilder 默认注册的服务。
public class ApplicationModule : IModule
{
// 模块类中可以使用依赖注入
private readonly IConfiguration _configuration;
public ApplicationModule(IConfiguration configuration)
{
_configuration = configuration;
}
public void ConfigureServices(ServiceContext services)
{
// 这里可以编写模块初始化代码
}
}
或者什么都不注入:
public class ApplicationModule : IModule
{
public void ConfigureServices(ServiceContext services)
{
// 这里可以编写模块初始化代码
}
}
在 Demo1.Application 项目里,如果需要将 MyService 注册到容器中,在类型上加上 [InjectOnScoped] 特性即可。
public interface IMyService
{
int Sum(int a, int b);
}
[InjectOnScoped] // 自动注册的标记
public class MyService : IMyService
{
public int Sum(int a, int b)
{
return a + b;
}
}
等同于:
service.AddScoped<IMyService, MyService>();
上层模块 Demo1.Api 中的 ApiModule.cs 可以通过特性注解引用底层模块。
