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

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

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實現依賴註入(封裝一個註冊類)