dotnetcore / osharp

OSharp是一个基于.Net6.0的快速开发框架,框架对 AspNetCore 的配置、依赖注入、日志、缓存、实体框架、Mvc(WebApi)、身份认证、功能权限、数据权限等模块进行更高一级的自动化封装,并规范了一套业务实现的代码结构与操作流程,使 .Net 框架更易于应用到实际项目开发中。
Apache License 2.0
2.79k stars 752 forks source link

移除模块Pack自动加载机制,改为手动加载 #139

Closed gmf520 closed 4 years ago

gmf520 commented 4 years ago

您的功能请求与现有问题有关吗?请描述

A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]

当前Pack加载的方式是框架启动时自动搜索加载的dll,找到所有OsharpPack的实现类型,然后按一定的顺序自动执行各个Pack的AddService添加服务和UsePack执行Pack的初始化。 自动加载带来如下问题:

  1. 所有存在的Pack都会自动启用
  2. 要禁用一个Pack,只能将之移出工程(移除类型或移除dll引用),很麻烦
  3. 无法明确了解哪些Pack加载了,以及他们的加载顺序

描述您想要的解决方案

A clear and concise description of what you want to happen.

  1. 移除Pack自动加载机制,改为手动加载,这样对加载了哪些Pack心中有数。
  2. 明确各个Pack的依赖关系,对于存在依赖的Pack,只加载顶层Pack即可,其依赖Pack自动加载
  3. 去除原先配置文件中各个Pack的Enabled配置
  4. 尽量减少[DependencyAttribute]的使用,改为在各个Pack中以代码的方式AddService,使各个Pack更内聚
  5. EventBus的EventHandler也不在自动加载,改为在各个Pack中的AddService中手动添加

代码影响:

Startup.cs中,原先为:

public void ConfigureServices(IServiceCollection services)
{
    services.AddOSharp();
}

更新后:

public void ConfigureServices(IServiceCollection services)
{
    services.AddOSharp()
        .AddPack<Log4NetPack>()
        .AddPack<AutoMapperPack>()
        .AddPack<EndpointsPack>()
        .AddPack<SwaggerPack>()
        .AddPack<RedisPack>()
        .AddPack<AuthenticationPack>()
        .AddPack<FunctionAuthorizationPack>()
        .AddPack<DataAuthorizationPack>()
        .AddPack<MySqlDefaultDbContextMigrationPack>();
}
gmf520 commented 4 years ago

96bf9f88776e248ac2a7837e4d3f2b98f2b7d960