使用AutoFac實現依賴注入(封裝一個注冊類)


 1  public class AutoFacBootStrapper
 2     {
 3         public static void CoreAutoFacInit()
 4         {
 5             var builder = new ContainerBuilder();
 6             HttpConfiguration config = GlobalConfiguration.Configuration;
 7             SetupResolveRules(builder);
 8             //注冊所有的Controllers,// 通過PropertiesAutowired制定類型A在獲取時會自動注入A的屬性//InstancePerLifetimeScope 保證對象生命周期基於請求//InstancePerDependency 對每一個依賴或每一次調用創建一個新的唯一的實例,這也是默認的創建實例的方式。
 9             builder.RegisterControllers(Assembly.GetExecutingAssembly()).PropertiesAutowired().InstancePerDependency();
10             //注冊所有的ApiControllers
11             builder.RegisterApiControllers(Assembly.GetExecutingAssembly()).PropertiesAutowired().InstancePerDependency();
12             builder.RegisterType<MemberQueryFilterAttribute>().PropertiesAutowired();//注意,這里要把我們的全局Filter注冊到Autofac中
13             builder.RegisterType<ParamsCheckFilterAttribute>().PropertiesAutowired();
14             builder.RegisterWebApiFilterProvider(GlobalConfiguration.Configuration);
15             var container = builder.Build();
16             //注冊api容器需要使用HttpConfiguration對象
17             config.DependencyResolver = new AutofacWebApiDependencyResolver(container);
18             //注冊MVC容器
19             DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
20         }
21 
22         private static void SetupResolveRules(ContainerBuilder builder)
23         {
24             //WebAPI只用引用BLL和DAL的接口,不用引用實現的dll。
25             //如需加載實現的程序集,將dll拷貝到bin目錄下即可,不用引用dll
26             var iBLL = Assembly.Load("cpm.IBLL");
27             var BLL = Assembly.Load("cpm.BLL");
28             var iDAL = Assembly.Load("cpm.IDAL");
29             var DAL = Assembly.Load("cpm.DAL");
30 
31             //根據名稱約定(服務層的接口和實現均以BLL結尾),實現服務接口和服務實現的依賴
32             builder.RegisterAssemblyTypes(iBLL, BLL)
33               .Where(t => t.Name.EndsWith("BLL"))
34               .AsImplementedInterfaces().PropertiesAutowired().InstancePerDependency();
35 
36             //根據名稱約定(數據訪問層的接口和實現均以DAL結尾),實現數據訪問接口和數據訪問實現的依賴
37             builder.RegisterAssemblyTypes(iDAL, DAL)
38               .Where(t => t.Name.EndsWith("DAL"))
39               .AsImplementedInterfaces().PropertiesAutowired().InstancePerDependency();
40             //注冊其他模塊
41             builder.RegisterModule<DbModule>();
42             builder.RegisterModule<WebModule>();
43         }
44     }
  /// <summary>
    /// web通用類注冊
    /// </summary>
    public class WebModule:Module
    {
        protected override void Load(ContainerBuilder builder)
        { 
            //這里的示例 具體情況自己創建
            builder.Register<IUserService>(c => RequestWrapper<IUserService>.CreateInstance()).InstancePerDependency();
             

        }
    }

 

在webapi項目global文件重要啟動注入

 


免責聲明!

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



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