.NET Core 依賴(lài)注入改造(1)- 命名服務(wù)
.NET Core 依賴(lài)注入改造(2)- 委托轉(zhuǎn)換
.NET Core 依賴(lài)注入改造(3)- ILogger
.NET Core 依賴(lài)注入改造(4)- ActivatorUtilities
.NET Core 依賴(lài)注入改造(5)- Context
.NET Core 依賴(lài)注入改造(附1)- Autowired
一、
在asp.net core當(dāng)中有一個(gè)和依賴(lài)注入息息相關(guān)的類(lèi)Startup,相信很多人都有印象

Startup
二、
在asp.net時(shí)代有一個(gè)特性PreApplicationStartMethodAttribute不知道各位看官是否有印象,它的作用和Startup有點(diǎn)像,但它可以在任何的類(lèi)庫(kù)中直接編寫(xiě)。
而我想要做的事情就是把他們兩個(gè)結(jié)合一下。
我的想法就是在任何的類(lèi)庫(kù)中都可以去聲明并注冊(cè)Startup。
[assembly:AssemblyStartup(typeof(Startup))]
class Startup
{
public void ConfigureServices(IServiceCollection services)
{
// 配置服務(wù)
}
public void Configure(IServiceProvider provider)
{
// 安裝服務(wù)
}
}
在程序啟動(dòng)時(shí)以擴(kuò)展方法的形式完成對(duì)所有注冊(cè)的Startup類(lèi)的調(diào)用
new ServiceCollection()
.ConfigureServices() //調(diào)用 啟動(dòng)類(lèi)的 ConfigureServices
.BuildServiceProvider()
.Configure(); //調(diào)用 啟動(dòng)類(lèi)的 Configure
三、
首先編寫(xiě)一個(gè)特性來(lái)完成注冊(cè)的動(dòng)作:
[AttributeUsage(AttributeTargets.Assembly, Inherited = false, AllowMultiple = true)]
public sealed class AssemblyStartupAttribute : Attribute
{
public AssemblyStartupAttribute(Type type) => Type = type;
public Type Type { get; }
}
0、
這篇文章應(yīng)該是這個(gè)系列的最后一篇文章了,寫(xiě)這篇文章的時(shí)候,其實(shí)我的內(nèi)心是很糾結(jié)的。我也不清楚這樣做到底是對(duì)還是不對(duì)。想了很久,最終還是決定把它寫(xiě)下來(lái)。