// This method gets called by the runtime. Use this method to add services to the container. public IServiceProvider ConfigureServices(IServiceCollection services) { GlobalHostingEnvironment.HostingEnvironment = this.HostingEnvironment; services.Replace(ServiceDescriptor.Transient <IControllerActivator, ServiceBasedControllerActivator>()); services.AddMvc(options => { options.Filters.Add(typeof(WebApiResultMiddleware)); options.RespectBrowserAcceptHeader = true; }).AddJsonOptions(options => { options.SerializerSettings.ContractResolver = new LowercaseContractResolver(); }); var assembly = this.GetType().GetTypeInfo().Assembly; var builder = new ContainerBuilder(); var manager = new ApplicationPartManager(); var feature = new ControllerFeature(); manager.ApplicationParts.Add(new AssemblyPart(assembly)); manager.FeatureProviders.Add(new ControllerFeatureProvider()); manager.PopulateFeature(feature); builder.RegisterTypes(feature.Controllers.Select(controller => controller.AsType()).ToArray()).PropertiesAutowired(); builder.Register(c => new DbService(Configuration.GetSection("ConnectionStrings")["DefaultConnection"])).AsSelf().PropertiesAutowired(); string[] assembliesName = { "SexyColor.BusinessComponents", "SexyColor.CommonComponents" }; var assemblies = assembliesName.Select(w => Assembly.Load(new AssemblyName(w))).ToArray(); builder.RegisterAssemblyTypes(assemblies).Where(t => t.Name.EndsWith("Repository")).AsSelf().AsImplementedInterfaces().SingleInstance().PropertiesAutowired(PropertyWiringOptions.AllowCircularDependencies); builder.RegisterAssemblyTypes(assemblies).Where(t => t.Name.EndsWith("Service")).AsSelf().AsImplementedInterfaces().SingleInstance().PropertiesAutowired(PropertyWiringOptions.AllowCircularDependencies); builder.RegisterType <SitesMiddlewareBusiness>().AsSelf().SingleInstance(); builder.RegisterType <CategoryMiddlewareBusiness>().AsSelf().SingleInstance(); builder.Register(c => new AuthorizerHelper()).AsSelf().SingleInstance().PropertiesAutowired(); builder.Register(c => new DefaultIdGenerator()).As <IdGenerator>().SingleInstance(); builder.Register(c => new DefaultUserIdToUserNameDictionary()).As <UserIdToUserNameDictionary>().SingleInstance().PropertiesAutowired(); builder.Register(c => new DefaultCaptchaManager()).As <ICaptchaManager>().SingleInstance(); builder.Register(c => new DefaultCacheService(new RedisMemoryCache(), new RuntimeMemoryCache(), 1.0F, true)).As <ICacheService>().SingleInstance(); //builder.Register(c => new DefaultCacheService(new RuntimeMemoryCache(), 1.0F)).As<ICacheService>().SingleInstance(); builder.Register(c => new DefaultStorageService()).As <IStorageService>().SingleInstance(); builder.Register(c => new DefaultStoreProvider(@"~/images")).As <IStoreProvider>().SingleInstance(); builder.Register(c => new Logger(this.HostingEnvironment)).As <SexyColor.CommonComponents.ILogger>().SingleInstance(); builder.Register(c => new Log4NetLoggerFactoryAdapter(repository.Name)).As <ILoggerFactoryAdapter>().SingleInstance(); builder.Register(c => new QuartzTaskScheduler()).As <ITaskScheduler>().SingleInstance(); //泛型注册 builder.RegisterGeneric(typeof(Repository <>)).As(typeof(IRepository <>)).SingleInstance().PropertiesAutowired(); builder.Populate(services); this.ApplicationContainer = builder.Build(); BuilderContext.Register(services, Configuration); ReadConfigurationHelper.Configuration = Configuration; DIContainer.RegisterContainer(this.ApplicationContainer); return(new AutofacServiceProvider(this.ApplicationContainer)); }
// This method gets called by the runtime. Use this method to add services to the container. public IServiceProvider ConfigureServices(IServiceCollection services) { GlobalHostingEnvironment.HostingEnvironment = this.HostingEnvironment; services.TryAddSingleton <IHttpContextAccessor, HttpContextAccessor>(); // Add framework services. services.Replace(ServiceDescriptor.Transient <IControllerActivator, ServiceBasedControllerActivator>()); services.AddAuthorization(authorization => { authorization.AddPolicy("EnterSystem", policy => policy.Requirements.Add(new EnterSystemRequirement())); }); services.AddSession(session => { session.IdleTimeout = TimeSpan.FromMinutes(30); }); services.AddTimedJob(); services.AddMvc(option => { option.Filters.Add(new HandleErrorToLogAttribute()); }).AddJsonOptions(option => { option.SerializerSettings.DateFormatString = "yyyy-MM-dd HH:mm"; }); var assembly = this.GetType().GetTypeInfo().Assembly; var builder = new ContainerBuilder(); var manager = new ApplicationPartManager(); var feature = new ControllerFeature(); manager.ApplicationParts.Add(new AssemblyPart(assembly)); manager.FeatureProviders.Add(new ControllerFeatureProvider()); manager.PopulateFeature(feature); builder.RegisterTypes(feature.Controllers.Select(controller => controller.AsType()).ToArray()).PropertiesAutowired(); builder.Register(c => new DbService(Configuration.GetSection("ConnectionStrings")["DefaultConnection"])).AsSelf().PropertiesAutowired(); string[] assembliesName = { "SexyColor.BusinessComponents", "SexyColor.CommonComponents" }; var assemblies = assembliesName.Select(w => Assembly.Load(new AssemblyName(w))).ToArray(); //仓储批量注册 builder.RegisterAssemblyTypes(assemblies).Where(t => t.Name.EndsWith("Repository")).AsSelf().AsImplementedInterfaces().SingleInstance().PropertiesAutowired(PropertyWiringOptions.AllowCircularDependencies); //服务批量注册 builder.RegisterAssemblyTypes(assemblies).Where(t => t.Name.EndsWith("Service")).AsSelf().AsImplementedInterfaces().SingleInstance().PropertiesAutowired(PropertyWiringOptions.AllowCircularDependencies); //业务组件注册 builder.Register(c => new AuthorizerHelper()).AsSelf().SingleInstance().PropertiesAutowired(); builder.Register(c => new DefaultIdGenerator()).As <IdGenerator>().SingleInstance(); builder.Register(c => new DefaultUserIdToUserNameDictionary()).As <UserIdToUserNameDictionary>().SingleInstance().PropertiesAutowired(); builder.Register(c => new DefaultCaptchaManager()).As <ICaptchaManager>().SingleInstance(); //builder.Register(c => new DefaultCacheService(new RedisMemoryCache(), new RuntimeMemoryCache(), 1.0F, true)).As<ICacheService>().SingleInstance(); builder.Register(c => new DefaultCacheService(new RuntimeMemoryCache(), 1.0F)).As <ICacheService>().SingleInstance(); builder.Register(c => new DefaultStorageService()).As <IStorageService>().SingleInstance(); builder.Register(c => new DefaultStoreProvider(@"~/images")).As <IStoreProvider>().SingleInstance(); builder.Register(c => new Logger(this.HostingEnvironment)).As <SexyColor.CommonComponents.ILogger>().SingleInstance(); builder.Register(c => new Log4NetLoggerFactoryAdapter(repository.Name)).As <ILoggerFactoryAdapter>().SingleInstance(); builder.Register(c => new QuartzTaskScheduler()).As <ITaskScheduler>().SingleInstance(); //泛型注册 builder.RegisterGeneric(typeof(Repository <>)).As(typeof(IRepository <>)).SingleInstance().PropertiesAutowired(); builder.Populate(services); this.ApplicationContainer = builder.Build(); BuilderContext.Register(services, Configuration); LogoSettings.RegisterSettings(LogoConfigManager.Instance().GetAllLogoConfigs()); new DefaultResourceManager().Excute(); ReadConfigurationHelper.Configuration = Configuration; DIContainer.RegisterContainer(this.ApplicationContainer); return(new AutofacServiceProvider(this.ApplicationContainer)); }