public static void Register() { var builder = new ContainerBuilder(); //cache manager builder.RegisterType<MemoryCacheManager>().As<ICacheManager>().Named<ICacheManager>("static_cache_manager").SingleInstance(); //builder.RegisterType<PerRequestCacheManager>().As<ICacheManager>().Named<ICacheManager>("per_request_cache_manager").InstancePerLifetimeScope(); // Since WCF requests does not have an http context we can not use InstancePerHttpRequest(). Instead we can use InstancePerLifetimeScope() // which is resolvable for both WCF and http requests. Autofac Wiki says : // The default ASP.NET and WCF integrations are set up so that InstancePerLifetimeScope() will attach a component to the current web request or service method call. // Register WCF services builder.RegisterType<UserService>().InstancePerLifetimeScope(); builder.RegisterType<GenericCharacteristicService>().InstancePerLifetimeScope(); builder.RegisterType<DataInfoService>().InstancePerLifetimeScope(); builder.RegisterType<Config>().InstancePerLifetimeScope(); builder.RegisterType<WebsiteSearcher>().As<ISearcher>().InstancePerLifetimeScope(); builder.RegisterType<DebugHelper>().As<IDebugHelper>().SingleInstance(); // database register var dbSettingsManager = new DatabaseSettingsManager(); var databaseSettings = dbSettingsManager.LoadSettings(); builder.RegisterType<DatabaseSettingsManager>().InstancePerDependency(); builder.Register(context => context.Resolve<DatabaseSettingsManager>().LoadSettings()).As<DatabaseSettings>().InstancePerLifetimeScope(); builder.Register(context => new EfDataProviderManager(context.Resolve<DatabaseSettings>())).As<IDataProviderManager>().InstancePerDependency(); // register for two types builder.Register(context => (IEfDataProvider)context.Resolve<IDataProviderManager>().DataProvider()).As<IDataProvider>().InstancePerDependency(); builder.Register(context => (IEfDataProvider)context.Resolve<IDataProviderManager>().DataProvider()).As<IEfDataProvider>().InstancePerDependency(); if (databaseSettings != null && databaseSettings.IsValid()) { //var efDataProviderManager = new EfDataProviderManager(dbSettingsManager.LoadSettings()); //var dataProvider = (IEfDataProvider)efDataProviderManager.DataProvider(); //dataProvider.Init(); builder.Register<IDatabase>(context => new CommerceDbContext(databaseSettings.DataConnectionString)).InstancePerLifetimeScope(); } else { builder.Register<IDatabase>(context => new CommerceDbContext(dbSettingsManager.LoadSettings().DataConnectionString)).InstancePerLifetimeScope(); } if (!dbSettingsManager.IsFaked) { builder.RegisterGeneric(typeof(EfRepository<>)).As(typeof(IRepository<>)).InstancePerLifetimeScope(); } else { builder.RegisterGeneric(typeof(FaskeRepository<>)).As(typeof(IRepository<>)).InstancePerLifetimeScope(); } //host.EnableDiscovery(); var container = builder.Build(); // make AutofacHostFactory.Container equal to EngineContext.Current // after it, should not set new container to AutofacHostFactory.Container or EngineContext.Current AutofacHostFactory.Container = container; EngineContext.Initialize(new AutofacContainerManager(container), new ContainerConfig(), false); }
public void Setup() { var dbSettingsManager = new DatabaseSettingsManager(); var databaseSettings = dbSettingsManager.LoadSettings(); IDataProviderManager manager = new NoSqlDataProviderManager(databaseSettings); manager.DataProvider().Init(); }
protected void Application_Start(object sender, EventArgs e) { var builder = new ContainerBuilder(); //System.Reflection.ConstructorInfo constructor = typeof(CommerceDbContext).GetConstructor(Type.EmptyTypes); #region Http Context builder.Register(context => new HttpContextWrapper(HttpContext.Current) as HttpContextBase); builder.Register(context => context.Resolve<HttpContextBase>().Request) .As<HttpRequestBase>().InstancePerHttpRequest(); builder.Register(context => context.Resolve<HttpContextBase>().Response) .As<HttpResponseBase>().InstancePerHttpRequest(); builder.Register(context => context.Resolve<HttpContextBase>().Server) .As<HttpServerUtilityBase>().InstancePerHttpRequest(); builder.Register(context => context.Resolve<HttpContextBase>().Session) .As<HttpSessionStateBase>().InstancePerHttpRequest(); #endregion //cache manager builder.RegisterType<MemoryCacheManager>().As<ICacheManager>().Named<ICacheManager>("static_cache_manager").SingleInstance(); // [TO-DO] InstancePerHttpRequest may not use here because there is not "request" sign builder.RegisterType<PerRequestCacheManager>().As<ICacheManager>().Named<ICacheManager>("per_request_cache_manager").InstancePerHttpRequest(); // The default ASP.NET and WCF integrations are set up so that InstancePerLifetimeScope() will attach a component to the current web request or service method call. // Register WCF services //builder.RegisterType<UserService>().InstancePerLifetimeScope(); //builder.RegisterType<UserExtension>().InstancePerLifetimeScope(); builder.RegisterType<Config>().InstancePerLifetimeScope(); builder.RegisterType<WebsiteSearcher>().As<ISearcher>().InstancePerLifetimeScope(); // database register //builder.RegisterType<CommerceDbContext>().As<IDatabase>().InstancePerLifetimeScope(); var dbSettingsManager = new DatabaseSettingsManager(); var databaseSettings = dbSettingsManager.LoadSettings(); builder.RegisterType<DatabaseSettingsManager>().InstancePerDependency(); builder.Register(context => context.Resolve<DatabaseSettingsManager>().LoadSettings()).As<DatabaseSettings>().InstancePerLifetimeScope(); builder.Register(context => new EfDataProviderManager(context.Resolve<DatabaseSettings>())).As<IDataProviderManager>().InstancePerDependency(); // register for two types builder.Register(context => (IEfDataProvider)context.Resolve<IDataProviderManager>().DataProvider()).As<IDataProvider>().InstancePerDependency(); builder.Register(context => (IEfDataProvider)context.Resolve<IDataProviderManager>().DataProvider()).As<IEfDataProvider>().InstancePerDependency(); if (databaseSettings != null && databaseSettings.IsValid()) { //var efDataProviderManager = new EfDataProviderManager(dbSettingsManager.LoadSettings()); //var dataProvider = (IEfDataProvider)efDataProviderManager.DataProvider(); //dataProvider.Init(); builder.Register<IDatabase>(c => new CommerceDbContext(databaseSettings.DataConnectionString)).InstancePerDependency(); } else { builder.Register<IDatabase>(c => new CommerceDbContext(dbSettingsManager.LoadSettings().DataConnectionString)).InstancePerDependency(); } builder.RegisterGeneric(typeof(EfRepository<>)).As(typeof(IRepository<>)).InstancePerLifetimeScope(); var container = builder.Build(); // make AutofacHostFactory.Container equal to EngineContext.Current // after it, should not set new container to AutofacHostFactory.Container or EngineContext.Current AutofacHostFactory.Container = container; EngineContext.Initialize(new AutofacContainerManager(container), new ContainerConfig(), false); }