.NET平臺的一種方便快捷的服務(wù)注冊方案
前言
隨著dotnet的發(fā)展,DependencyInjection已經(jīng)成為基礎(chǔ)庫的一部分,現(xiàn)在我們的很多新型應(yīng)用程序很自然地應(yīng)用了DependencyInjection功能。應(yīng)用功能越多,往往服務(wù)類型數(shù)量也隨著增加,如果依靠手寫代碼一個服務(wù)一個服務(wù)地進(jìn)行注冊則非常麻煩。如果使用特性標(biāo)記服務(wù),在運(yùn)行時反射掃描服務(wù)并注冊服務(wù),不但會增加服務(wù)的啟動時間,同時在AOT裁剪環(huán)境下服務(wù)類型由于沒有顯式的被使用而編譯時默認(rèn)被裁剪掉,從而表現(xiàn)為沒有可注冊的服務(wù)。
方案設(shè)計
Annotation + SourceGenerator一種理解的方案,它仍然使用特性來標(biāo)記服務(wù),不同的是它在編譯時使用SourceGenerator技術(shù)收集程序集里標(biāo)記的服務(wù)類型,然后在集程序集里增加向DependencyInjection注冊所有標(biāo)記的服務(wù)的擴(kuò)展方法代碼。
經(jīng)過SourceGenerator之后,和手寫代碼一個服務(wù)一個服務(wù)的注冊的效果是完全一樣的,最終程序在運(yùn)行時,不再需要反射程序集掃描服務(wù)類型,啟動速度會更快一丟丟。同時由于這些服務(wù)類型都是顯式的被調(diào)用,所以也適用于AOT裁剪的項目環(huán)境,不再擔(dān)心服務(wù)類型默認(rèn)被裁剪掉。
方案實現(xiàn)
DependencyInjection.Annotation 這是我對上述方案的一種實現(xiàn),它開源在github上,支持一個實現(xiàn)對應(yīng)一種或(最)多(6)種服務(wù)類型,使用方式也非常簡單。
1 nuget引用
<PackageReference Include="DependencyInjection.Annotation" Version="1.0.0" />
2 服務(wù)標(biāo)記
// 服務(wù)類型為MyService自身
[Service(ServiceLifetime.Singleton)]
class MyService
{
}// 服務(wù)類型為IMyService1
[Service(ServiceLifetime.Singleton, typeof(IMyService1))]
class MyService : IMyService1
{
}// 服務(wù)類型為IMyService1和IMyService2
[Service(ServiceLifetime.Singleton, typeof(IMyService1), typeof(IMyService2))]
class MyService : IMyService1, IMyService2, IDisposable
{
}3 服務(wù)注冊
builder.Services.Add{AssemblyName}();其中{AssemblyName}為包含服務(wù)的程序集名。
到此這篇關(guān)于.NET平臺的一種方便快捷的服務(wù)注冊方案的文章就介紹到這了,更多相關(guān).NET平臺服務(wù)注冊方案內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
winform攔截關(guān)閉按鈕觸發(fā)的事件示例
這篇文章主要介紹了c# winform攔截關(guān)閉按鈕觸發(fā)的事件示例,大家參考使用吧2014-01-01
C#開發(fā)Windows服務(wù)實例之實現(xiàn)禁止QQ運(yùn)行
這篇文章主要介紹了通過C#開發(fā)Windows服務(wù),查殺qq進(jìn)程的服務(wù)功能,需要的朋友可以參考下2013-10-10
C# 實現(xiàn)ADSL自動斷網(wǎng)和撥號的方法(適用于撥號用戶)
下面小編就為大家?guī)硪黄狢# 實現(xiàn)ADSL自動斷網(wǎng)和撥號的方法(適用于撥號用戶)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-12-12
C#算法函數(shù):獲取一個字符串中的最大長度的數(shù)字
這篇文章介紹了使用C#獲取一個字符串中最大長度的數(shù)字的實例代碼,有需要的朋友可以參考一下。2016-06-06
C#高保真實現(xiàn)Word轉(zhuǎn)HTML實戰(zhàn)指南
在數(shù)字化辦公中,文檔內(nèi)容的高效流轉(zhuǎn)與展示是企業(yè)應(yīng)用和Web服務(wù)不可或缺的一環(huán),本文將探討如何利用 C# 語言,并借助專業(yè)的文檔處理庫,實現(xiàn)高保真的 Word轉(zhuǎn)HTML 轉(zhuǎn)換,需要的可以了解下2025-08-08

