.Net Core IOC依賴注入和Autofac(一)

自帶IOC

.Net Core是自帶簡單的IOC框架的,實現起來也很簡單,對於Asp.Net Core項目只需要在Startup文件中的ConfigureServices(IServiceCollection services)中進行下配置就行了,具體實現的代碼如下

        public void ConfigureServices(IServiceCollection services) {
            services.AddMvc();

            services.AddTransient<IServiceA, ServiceA>();//DI依賴注入的實現 .net core自帶的框架
        }

AddTransient指的是生命週期,他還有AddScoped,AddSingleton註冊方式都是<接口,實現類>

使用的方法如,建立一控制器testController

private IServiceA _ServiceA;
public testController(IServiceA ServiceA) {
            this._ServiceA = ServiceA;
        }

是不是很熟悉,我們直接使用構造函數注入就行了。

當然這是最簡單的用法了,這樣你的所有接口都得一個個的註冊

AutoFac

其實我們也可以使用第三方的IOC框架,如AutoFac,Untity等其他,我們就來記錄下AutoFac在.Net Core下如何使用吧

首先我們要使用nutget安裝下AutoFac的類庫,這裏我們將安裝Autofac和Autofac.Extension.DependencyInjection,

其中Autofac.Configuration不一定要安裝,這個是爲了搭配Autofac的配置文件來使用的,之後我們再來測試這個配置文件如何在.Net Core下的使用方式

安裝好,使用第三方Autofac容器來替代系統知道的IOC ,方法將ConfigureServices方法的Void返回改爲返回值IServiceProvider,原來Asp.net Core自動生成額Startup.cs文件中ConfigureServices方法是Void返回值,這裏我們需要改成IServiceProvider。

 public IServiceProvider ConfigureServices(IServiceCollection services) {
            services.AddMvc();
            //實例化Autofac容器
            ContainerBuilder builder = new ContainerBuilder();
            //將collection中的服務填充到Autofac
            builder.Populate(services);
            //註冊
            builder.RegisterType<ServiceA>().As<IServiceA>().InstancePerLifetimeScope();

            //創建容器
            IContainer container = builder.Build();
            //第三方IOC容器來實現  兩種方法都可以返回IServiceProvider
            return new AutofacServiceProvider(container);
            //return container.Resolve<IServiceProvider>();
}

這樣我們就可以使用構造函數進行注入了,使用和剛纔自帶的IOC一樣。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章