自帶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一樣。