ASP.NET 中Autofac的使用

第一步:引入nuget包

Install-Package Autofac

Install-Package Autofac.MVC5 

Install-Package Autofac.WebApi2

第二步:Autofac容器工廠

    /// <summary>
    /// Autofac容器工廠
    /// </summary>
    public class AutofacFactory
    {
        /// <summary>
        /// Autofac容器對象
        /// </summary>
        private static IContainer _container;

        /// <summary>
        /// 註冊Autofac容器工廠
        /// </summary>
        public static void register()
        {
            //初始化
            var builder = new ContainerBuilder();

            // 注入MVC 控制器        
       builder.RegisterControllers(Assembly.GetCallingAssembly()).PropertiesAutowired();
            // 注入WebApi 控制器
          
     builder.RegisterApiControllers(Assembly.GetCallingAssembly()).PropertiesAutowired();


            // 獲取bin文件夾中所有dll
            var dataAccess = AppDomain.CurrentDomain.GetAssemblies();

            // 注入Repository
            builder.RegisterAssemblyTypes(dataAccess)
                   .Where(t => t.Name.EndsWith("Repository"))
                   .AsImplementedInterfaces();

            // 注入Service
            builder.RegisterAssemblyTypes(dataAccess)
            .Where(t => t.Name.EndsWith("Service"))
            .AsImplementedInterfaces();

            //創建容器
            _container = builder.Build();

            //設置MVC依賴注入
            DependencyResolver.SetResolver(new AutofacDependencyResolver(_container));

            //設置WebApi依賴注入         
            GlobalConfiguration.Configuration.DependencyResolver = new AutofacWebApiDependencyResolver(_container);

        }

        /// <summary>
        /// 從Autofac容器獲取對象
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <returns></returns>
        public static T Get<T>()
        {
            return _container.Resolve<T>();
        }
    }

第三步:在 Global.asax 中注入 Autofac容器工廠實現自動注入

AutofacFactory.register();

第四步:使用

 /// <summary>
    /// 測試Api控制器
    /// </summary>
    public class TestController : ApiController
    {

        /// <summary>
        /// 測試業務
        /// </summary>
        ITestService test;
        /// <summary>
        /// DI
        /// </summary>
        /// <param name="service"></param>
        public TestController(ITestService service)
        {
            test = service;
        }

        /// <summary>
        /// 測試方法
        /// </summary>
        /// <returns></returns>
        [HttpGet]
        public string show()
        {
            test.saveTran("張三", "張道陵");
            return test.go();
        }
    }

注意:需要注入的類庫生成的dll文件一定要放在對應啓動項目的bin文件夾下

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