一、为什么使用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; } }