天天看點

.Net Core Linux centos7行—IOC子產品

.net core中可以說是用了全新的IOC模闆,定義在Microsoft.Extensions.DependencyInjection下。提供了一套标準的接口。并提供了預設實作。并且大範圍使用着,處處都展現着IOC的設計思想。

Startup的ConfigureServices方法中,集中對服務進行配置。可以看到預設的.net core mvc預設項目已經為我們注入了不少服務。看注釋也就懂了,也沒什麼特别好解釋的(^_^)。

.Net Core Linux centos7行—IOC子產品

最後2行代碼是自定義配置的注入。需要Microsoft.Extensions.Options.ConfigurationExtensions package的支援

.Net Core Linux centos7行—IOC子產品

AddOptions 針對Ioptions<POCOModel>提供管理,緩存,配置變動自動支援服務,即配置檔案有改動會自動反應在應用程式中,且應用程式不需要自動重新開機。不像以前的web.config.有任何改動都會自動重新開機。

Configure<T>(IConfiguration).表示配置的内容來自配置檔案。

.Net Core Linux centos7行—IOC子產品

IndexSetting是建立的一個model,即配置項。

.Net Core Linux centos7行—IOC子產品

配置檔案中的IndexSetting

.Net Core Linux centos7行—IOC子產品

目前.net core ioc有3種擷取service方式。

1.ctor注入。

2.action 參數注入

3.容器擷取方式

.Net Core Linux centos7行—IOC子產品

當然,應對一般情況,這種方式也許夠用了。but,現實顯然不是這樣的。通常我們需要更強大的ioc lib。目前官方推薦的更強大的ioc lib。也是業界大名鼎鼎的autofac。autofac的介紹園子裡面一大把,并且寫的很詳細,很好。就不多介紹了。

官方文檔:http://docs.autofac.org/en/latest/integration/aspnetcore.html

asp.net和asp.net core時代的差別主要有幾點。

1.Use InstancePerLifetimeScope instead of InstancePerRequest.

簡單來說就是生命周期的統一。

2.No more DependencyResolver.

沒有以前的DependencyResolver入口了

3.No manual controller registration.

不再需要注冊自己的controllerfactory了,也包括owin中的middleware。

需要使用它,當然需要添加它

.Net Core Linux centos7行—IOC子產品

針對Startup的ConfigureServices方法做一些改造

.Net Core Linux centos7行—IOC子產品

使用任何第三方ioc,都需要傳回IServiceProvider。替換系統的預設IServiceProvider。否則不能生效。

然後建立autofac的build,一切照舊,我們就可以愉快的使用autofac啦。