.NET Core 依賴(lài)注入改造(6)- Startup

.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)。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容