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);
        }
Esempio n. 2
0
 public void Setup()
 {
     var dbSettingsManager = new DatabaseSettingsManager();
     var databaseSettings = dbSettingsManager.LoadSettings();
     IDataProviderManager manager = new NoSqlDataProviderManager(databaseSettings);
     manager.DataProvider().Init();
 }
Esempio n. 3
0
        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);
        }