public static void Register() { try { var builder = new ContainerBuilder(); builder.RegisterControllers(Assembly.GetExecutingAssembly()); builder.RegisterFilterProvider(); foreach (var con in ConfigUtil.GetConnStrings()) { builder.Register(c => new SqlConnection(con.Value)) .Named <IDbConnection>(con.Key) .InstancePerRequest(); } builder.RegisterType <UnitOfWork>().As <IUnitOfWork>().InstancePerRequest(); builder.Register <Func <string, IDbConnection> >(c => { var ic = c.Resolve <IComponentContext>(); return(named => ic.ResolveNamed <IDbConnection>(named)); }); builder.RegisterGeneric(typeof(Repository <>)).As(typeof(IRepository <>)).InstancePerRequest(); RedisProxy.Initialize(); var redis = new RedisProxy(); var localCache = new LocalCache(); builder.Register(c => localCache).As <ICache>().SingleInstance(); builder.Register(c => redis).As <IRedisProxy>().SingleInstance(); builder.RegisterType <MongoProxy>().As <IMongoProxy>().SingleInstance(); builder.RegisterType <MemcacheProxy>().As <IMemcacheProxy>().SingleInstance(); builder.RegisterType <Logger>().As <ILog>().SingleInstance(); builder.RegisterType <ExcelClient>().As <IExcelClient>().InstancePerRequest(); builder.RegisterType <ServiceBus>().As <IServiceBus>().SingleInstance(); var assemblies = BuildManager.GetReferencedAssemblies() .Cast <Assembly>() .Where(a => a.GetTypes().FirstOrDefault(t => t.GetInterfaces().Contains(typeof(IService))) != null) .ToArray(); builder.RegisterAssemblyTypes(assemblies) .Where(t => t.GetInterfaces().Contains(typeof(IService))) .AsSelf() .InstancePerLifetimeScope(); builder.RegisterAssemblyTypes(assemblies)//查找程序集中以Svc结尾的类型 .Where(t => t.GetInterfaces().Contains(typeof(IService)) && t.Name.EndsWith("Svc")) .AsImplementedInterfaces().InstancePerRequest(); var container = builder.Build(); DependencyResolver.SetResolver(new AutofacDependencyResolver(container)); } catch (Exception EX) { throw; } }
internal static ContainerBuilder ConfigureContainer(ContainerBuilder builder) { builder.RegisterModule(new QuartzAutofacFactoryModule()); builder.RegisterModule(new QuartzAutofacJobsModule(typeof(JobConfig).Assembly)); builder.RegisterType <JobService>().AsSelf(); foreach (var con in ConfigUtil.GetConnStrings()) { builder.Register(c => new SqlConnection(con.Value)) .Named <IDbConnection>(con.Key) .InstancePerLifetimeScope(); } builder.RegisterType <UnitOfWork>().As <IUnitOfWork>().InstancePerLifetimeScope(); //builder.Register<Func<string, IDbConnection>>(c => named => c.ResolveNamed<IDbConnection>(named)).InstancePerLifetimeScope(); builder.Register <Func <string, IDbConnection> >(c => { var ic = c.Resolve <IComponentContext>(); return(named => ic.ResolveNamed <IDbConnection>(named)); }); builder.RegisterGeneric(typeof(Repository <>)).As(typeof(IRepository <>)).InstancePerLifetimeScope(); var execDir = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); var files = Directory.GetFiles(execDir, "Max.*.dll", SearchOption.TopDirectoryOnly); if (files.Length > 0) { var assemblies = new Assembly[files.Length]; for (int i = 0; i < files.Length; i++) { assemblies[i] = Assembly.LoadFile(files[i]); } builder.RegisterAssemblyTypes(assemblies) .Where(t => t.GetInterfaces().Contains(typeof(IService))) .AsSelf() .InstancePerLifetimeScope(); } RedisProxy.Initialize(); var redis = new RedisProxy(); builder.Register(c => redis).As <ICache>().SingleInstance(); builder.Register(c => redis).As <IRedisProxy>().SingleInstance(); builder.RegisterType <ServiceBus>().As <IServiceBus>().SingleInstance(); builder.RegisterType <MongoProxy>().As <IMongoProxy>().SingleInstance(); return(builder); }
public static void Register() { var configuration = GlobalConfiguration.Configuration; var builder = new ContainerBuilder(); builder.RegisterApiControllers(Assembly.GetExecutingAssembly()); builder.RegisterWebApiFilterProvider(configuration); foreach (var con in ConfigUtil.GetConnStrings()) { builder.Register(c => new SqlConnection(con.Value)) .Named <IDbConnection>(con.Key) .InstancePerRequest(); } builder.RegisterType <UnitOfWork>().As <IUnitOfWork>().InstancePerRequest(); builder.Register <Func <string, IDbConnection> >(c => { var ic = c.Resolve <IComponentContext>(); return(named => ic.ResolveNamed <IDbConnection>(named)); }); builder.RegisterGeneric(typeof(Repository <>)).As(typeof(IRepository <>)).InstancePerRequest(); builder.RegisterType <MongoProxy>().As <IMongoProxy>().InstancePerRequest(); RedisProxy.Initialize(); var redis = new RedisProxy(); var memcache = new MemcacheProxy(); builder.Register(c => redis).As <ICache>().SingleInstance(); builder.Register(c => redis).As <IRedisProxy>().SingleInstance(); builder.Register(c => memcache).As <IMemcacheProxy>().SingleInstance(); builder.RegisterType <ServiceBus>().As <IServiceBus>().SingleInstance(); var assemblies = BuildManager.GetReferencedAssemblies() .Cast <Assembly>() .Where(a => a.GetTypes().FirstOrDefault(t => t.GetInterfaces().Contains(typeof(IService))) != null) .ToArray(); builder.RegisterAssemblyTypes(assemblies)//查找程序集中以Svc结尾的类型 .Where(t => t.GetInterfaces().Contains(typeof(IService)) && t.Name.EndsWith("Svc")) .AsImplementedInterfaces().InstancePerRequest(); builder.RegisterAssemblyTypes(assemblies) .Where(t => t.GetInterfaces().Contains(typeof(IService))) .AsSelf() .InstancePerRequest(); #region API Processor Register builder.RegisterType <ProcessorFactory>().As <IProcessorFactory>().InstancePerRequest(); foreach (var type in ProcessorUtil.GetProcessors()) { builder.RegisterType(type) .Named <IProcessor>(ProcessorUtil.GetBizCode(type)) .InstancePerRequest(); } builder.Register <Func <string, IProcessor> >(c => { var ic = c.Resolve <IComponentContext>(); return(name => ic.ResolveNamed <IProcessor>(name)); }); #endregion var container = builder.Build(); configuration.DependencyResolver = new AutofacWebApiDependencyResolver(container); }