一、為什么使用AutoFac?
Autofac是一款IOC框架,比較於其他的IOC框架,如Spring.NET,Unity,Castle等等所包含的,它很輕量級性能上非常高,Autofac是.NET領域最為流行的IOC框架之一,傳說是速度最快的一個。
源碼下載地址https://github.com/autofac/Autofac
- 控制反轉(IoC/Inverse Of Control): 調用者不再創建被調用者的實例,由autofac框架實現(容器創建)所以稱為控制反轉。
- 依賴注入(DI/Dependence injection) : 容器創建好實例后再注入調用者稱為依賴注入
二、AutoFac的使用
NuGet安裝程序包
封裝ConfigureAutofac方法通過ConfigureServices進行調用實現自動注入
/// <summary> /// autofac 自動注入 /// </summary> /// <param name="services"></param> /// <returns></returns> public IServiceProvider ConfigureAutofac(IServiceCollection services) { //初始化容器 var builder = new ContainerBuilder(); //管道寄居 builder.Populate(services); //業務邏輯層所在程序集命名空間 Assembly service = Assembly.Load("Api.Service"); //業務邏輯層接口所在程序集命名空間 Assembly iService = Assembly.Load("Api.IService"); //數據訪問層所在程序集命名空間 Assembly data = Assembly.Load("Api.Data"); //數據訪問層接口所在程序集命名空間 Assembly iData = Assembly.Load("Api.IData"); //自動注入 builder.RegisterAssemblyTypes(service, iService, data, iData) .AsImplementedInterfaces(); //構造 var ApplicationContainer = builder.Build(); //將AutoFac反饋到管道中 return new AutofacServiceProvider(ApplicationContainer); }
//autofac 自動注入 return ConfigureAutofac(services);
Controller中使用
[Route("api/[controller]/[action]")] public class AuthController : ApiController { private readonly ITokenService _tokenService; /// <summary> /// /// </summary> public AuthController(ITokenService tokenService) { _tokenService = tokenService; } }