使用AutoFac實現依賴注入(封裝一個註冊類)
阿新 • • 發佈:2018-11-24
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檔案重要啟動注入