.NET Core 依赖注入改造(6)- Startup

.NET Core 依赖注入改造(1)- 命名服务
.NET Core 依赖注入改造(2)- 委托转换
.NET Core 依赖注入改造(3)- ILogger
.NET Core 依赖注入改造(4)- ActivatorUtilities
.NET Core 依赖注入改造(5)- Context

.NET Core 依赖注入改造(附1)- Autowired

一、

asp.net core当中有一个和依赖注入息息相关的类Startup,相信很多人都有印象

Startup

二、

在asp.net时代有一个特性PreApplicationStartMethodAttribute不知道各位看官是否有印象,它的作用和Startup有点像,但它可以在任何的类库中直接编写。
而我想要做的事情就是把他们两个结合一下。

我的想法就是在任何的类库中都可以去声明并注册Startup

[assembly:AssemblyStartup(typeof(Startup))]
class Startup
{
    public void ConfigureServices(IServiceCollection services)
    {
        // 配置服务
    }

    public void Configure(IServiceProvider provider)
    {
        // 安装服务
    }
}

在程序启动时以扩展方法的形式完成对所有注册的Startup类的调用

new ServiceCollection()
         .ConfigureServices()     //调用 启动类的 ConfigureServices
         .BuildServiceProvider()
         .Configure();            //调用 启动类的 Configure

三、

首先编写一个特性来完成注册的动作:

[AttributeUsage(AttributeTargets.Assembly, Inherited = false, AllowMultiple = true)]
public sealed class AssemblyStartupAttribute : Attribute
{
    public AssemblyStartupAttribute(Type type) => Type = type;
    public Type Type { get; }
}

0、

这篇文章应该是这个系列的最后一篇文章了,写这篇文章的时候,其实我的内心是很纠结的。我也不清楚这样做到底是对还是不对。想了很久,最终还是决定把它写下来。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容