Asp.Net Core中使用Autofac 實現自動依賴注入


一、為什么使用AutoFac?

Autofac是一款IOC框架,比較於其他的IOC框架,如Spring.NET,Unity,Castle等等所包含的,它很輕量級性能上非常高,Autofac是.NET領域最為流行的IOC框架之一,傳說是速度最快的一個。

     官方網站http://autofac.org/

          源碼下載地址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;
        }
    }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM