1. 程式人生 > >使用AutoFac實現依賴注入(封裝一個註冊類)

使用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檔案重要啟動注入