如何在.NET Core控制台程序中使用依赖注入
背景介紹
依賴注入(Dependency Injection), 是面向?qū)ο缶幊讨械囊环N設(shè)計(jì)原則,可以用來(lái)減低代碼之間的耦合度。在.NET Core MVC中
我們可以在Startup.cs文件的ConfigureService方法中使用服務(wù)容器IServiceCollection注冊(cè)接口及其實(shí)現(xiàn)類的映射。
例如,當(dāng)我們需要訪問(wèn)Http上下文時(shí),我們需要配置IHttpContextAccessor接口及其實(shí)現(xiàn)類HttpContextAccessor
那么當(dāng)我們編寫一個(gè).NET Core控制臺(tái)程序的時(shí)候,我們?cè)撊绾问褂靡蕾囎⑷肽?#xff1f;
使用內(nèi)置依賴注入
在.NET Core中,內(nèi)置依賴注入模塊使用的程序集是Microsoft.Extensions.DependencyInjection。
所以如果希望在控制臺(tái)程序中使用內(nèi)置依賴注入,我們首先需要使用NUGET添加對(duì)Microsoft.Extensions.DependencyInjection程序集的引用。
PM> Install-Package Microsoft.Extensions.DependencyInjection這里為了說(shuō)明如何使用.NET Core內(nèi)置的依賴注入模塊, 我們創(chuàng)建以下2個(gè)服務(wù)接口。
然后我們針對(duì)這2個(gè)服務(wù)接口,添加2個(gè)對(duì)應(yīng)的實(shí)現(xiàn)類
代碼解釋
BarService類構(gòu)造函數(shù)依賴了一個(gè)IFooService接口的實(shí)現(xiàn)
FooService類構(gòu)造函數(shù)依賴一個(gè)ILoggerFactory接口的實(shí)現(xiàn)
FooService中,我們輸出了一個(gè)Information級(jí)別的日志
在以上實(shí)現(xiàn)類代碼中,我們使用了.NET Core內(nèi)置的日志模塊, 所以我們還需要使用NUGET添加對(duì)應(yīng)的程序集Microsoft.Extensions.Logging.Console
PM> Install-Package Microsoft.Extensions.Logging.Console最后我們來(lái)修改Program.cs, 代碼如下
代碼解釋
這里我們手動(dòng)實(shí)例化了一個(gè)ServiceCollection類, 這個(gè)類是IServiceCollection>接口的一個(gè)實(shí)現(xiàn)類,它就是一個(gè).NET Core內(nèi)置服務(wù)容器。
然后我們?cè)诜?wù)容器中注冊(cè)了IFooService接口的實(shí)現(xiàn)類FooService以及IBarService接口的實(shí)現(xiàn)類BarService。
當(dāng)時(shí)需要從服務(wù)容器中獲取接口類的對(duì)應(yīng)實(shí)現(xiàn)類時(shí),我們只需要調(diào)用服務(wù)容器類的GetSerivce方法。
最終效果
運(yùn)行程序,我們期望的日志,正確的輸出了
使用第三方依賴注入
除了使用內(nèi)置的依賴注入模塊,我們還可以直接使用一些第三方的依賴注入框架,例如Autofac, StructureMap。
這里我們來(lái)使用StructureMap來(lái)替換當(dāng)前的內(nèi)置的依賴注入框架。
首先我們需要先添加程序集引用。
PM> Install-Package StructureMap.Microsoft.DependencyInjection然后我們來(lái)修改Program.cs文件,代碼如下
代碼解釋
這里我們實(shí)例化了一個(gè)StructureMap的服務(wù)容器Container, 并在其Configure方法中配置了接口類及其實(shí)現(xiàn)類的自動(dòng)搜索。這里使用的是一種約定,接口類必須以字母“I”開(kāi)頭, 實(shí)現(xiàn)類的名字和接口類只相差一個(gè)字母“I”, 例IFooService,?FooService,?IBarService,?BarService
后續(xù)代碼和前一個(gè)例子基本一樣。雖然看起來(lái)代碼多了很多,但是實(shí)際上這種使用約定的注入方式非常強(qiáng)力,可以省去很多手動(dòng)配置的代碼。
最終效果
運(yùn)行程序,代碼和之前的效果一樣
原文地址:?https://www.cnblogs.com/lwqlun/p/9736391.html
.NET社區(qū)新聞,深度好文,歡迎訪問(wèn)公眾號(hào)文章匯總 http://www.csharpkit.com
總結(jié)
以上是生活随笔為你收集整理的如何在.NET Core控制台程序中使用依赖注入的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 大型科技公司架构:中台模式的爱与恨
- 下一篇: 在asp.net core2.1中添加中