.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,相信很多人都有印象
二、
在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、
这篇文章应该是这个系列的最后一篇文章了,写这篇文章的时候,其实我的内心是很纠结的。我也不清楚这样做到底是对还是不对。想了很久,最终还是决定把它写下来。