Example #1
0
        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;
            }
        }
Example #2
0
        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);
        }
Example #3
0
        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);
        }