zoukankan      html  css  js  c++  java
  • 使用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文件重要启动注入

  • 相关阅读:
    原根
    FFT
    bzoj3991[SDOI2015]寻宝游戏
    bzoj3990[SDOI2015]排序
    序列自动机
    bzoj4032[HEOI2015]最短不公共子串
    2015.8.28 字符串
    bzoj2821作诗
    bzoj2741【FOTILE模拟赛】L
    一个牛人给java初学者的建议
  • 原文地址:https://www.cnblogs.com/zzlblog/p/10013238.html
Copyright © 2011-2022 走看看