使用AutoFac實現依賴註入(封裝一個註冊類)
阿新 • • 發佈:2018-11-24
exe 訪問 con imp 模塊 query 一次 生命周期 程序
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文件重要啟動註入
使用AutoFac實現依賴註入(封裝一個註冊類)