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文件重要啟動注入