Пример #1
0
        private void Initialize(System.Web.HttpContext ctx)
        {
            m_Host = ctx.Request.Url.Host;
            var contextBase = new System.Web.HttpContextWrapper(ctx);

            var container = new UnityContainer();

            container.AddNewExtension<Interception>();

            // Enregistrement des repositories
            container.RegisterType<Repositories.ICouponRepository, Repositories.NullCouponRepository>(new ContainerControlledLifetimeManager());
            container.RegisterType<Repositories.ICartRepository, Repositories.HttpContextCartRepository>(new ContainerControlledLifetimeManager());
            container.RegisterType<Repositories.IRegistrationRepository, Repositories.SessionRegistrationRepository>(new ContainerControlledLifetimeManager());
            container.RegisterType<Repositories.ILocalizationRepository, Repositories.VoidLocalizationRepository>(new ContainerControlledLifetimeManager());
            container.RegisterType<Repositories.ICommentRepository, Repositories.VoidCommentRepository>(new ContainerControlledLifetimeManager());

            // Enregistrement des services
            container.RegisterType<Services.ICacheService, Services.SimpleCacheService>(new ContainerControlledLifetimeManager());
            container.RegisterType<Services.ICartService, Services.CartService>(new ContainerControlledLifetimeManager());
            container.RegisterType<Services.IScheduledTaskService, Services.ScheduledTaskService>(new ContainerControlledLifetimeManager());
            container.RegisterType<Services.IEmailerService, Services.EmailerService>(new ContainerControlledLifetimeManager());
            container.RegisterType<Services.IIncentiveService, Services.IncentiveService>(new ContainerControlledLifetimeManager());
            container.RegisterType<Services.ILocalizationService, Services.VoidLocalizationService>(new ContainerControlledLifetimeManager());
            container.RegisterType<Services.ISearchOptimizationService, Services.VoidSearchOptimizationService>(new ContainerControlledLifetimeManager());
            var pluginEnumeratorInjectionMembers = new InjectionMember[]
            {
                new InjectionConstructor(
                        ctx.Server.MapPath("/plugins.config")
                        , ctx.Server.MapPath("/bin")
                )
            };
            container.RegisterType<Extensibility.IPluginEnumerator, Extensibility.XmlConfigPluginEnumerator>(new ContainerControlledLifetimeManager(), pluginEnumeratorInjectionMembers);
            container.RegisterType<Extensibility.IPluginLoaderService, Extensibility.PluginLoaderService>(new ContainerControlledLifetimeManager());
            container.RegisterType<Services.IEventSubscriptionService, Services.EventSubscriptionService>(new ContainerControlledLifetimeManager());
            container.RegisterType<Services.IEventPublisher, Services.EventPublisher>(new ContainerControlledLifetimeManager());
            container.RegisterType<Services.ISettingsService, Services.SettingsService>(new ContainerControlledLifetimeManager());
            container.RegisterType<Services.ISalesService, Services.SalesService>(new ContainerControlledLifetimeManager());
            // Configuration des routes
            container.RegisterType<Services.IRoutesRegistrationService, ERPStoreRoutes>(new ContainerControlledLifetimeManager());

            // Enregistrement des modes de reglement par defaut
            container.RegisterType<Services.IPaymentService, Services.PaymentByCheckService>("check",new ContainerControlledLifetimeManager());
            container.RegisterType<Services.IPaymentService, Services.PaymentByWireTransferService>("wiretransfer",new ContainerControlledLifetimeManager());

            // Global Event Consumer
            container.RegisterType<Services.UserLoggedEventMessage>("userLoggedEventMessage", new ContainerControlledLifetimeManager());

            // Logger par defaut
            container.RegisterType<Logging.ILogger, Logging.ConsoleLogger>(new PerThreadLifetimeManager());

            // Chargement des services et overriding a partir du fichier
            // de configuration unity.config
            var map = new ExeConfigurationFileMap();
            var unityConfigFileName = ERPStore.Configuration.ConfigurationSettings.AppSettings["unityConfigFileName"] ?? "unity.config";
            map.ExeConfigFilename = System.IO.Path.Combine(System.Web.HttpContext.Current.Server.MapPath(@"\"), unityConfigFileName);
            var config = ConfigurationManager.OpenMappedExeConfiguration(map, ConfigurationUserLevel.None);
            var section = (UnityConfigurationSection)config.GetSection("unity");
            if (section == null)
            {
                throw new Exception(string.Format("unity section in {0} does not exists", unityConfigFileName));
            }
            section.Configure(container);

            RegisterGlobalFilters(GlobalFilters.Filters);

            container.RegisterInstance<IControllerFactory>(System.Web.Mvc.ControllerBuilder.Current.GetControllerFactory());
            container.RegisterType<IControllerActivator, UnityControllerActivator>();
            container.RegisterType<IViewPageActivator, UnityViewPageActivator>();
            var filterProvider = new UnityFilterProvider(container);
            container.RegisterInstance<IFilterProvider>("attributes", filterProvider);
            container.RegisterType<ModelMetadataProvider, DataAnnotationsModelMetadataProvider>();
            var resolver = new UnityDependencyResolver(container);
            System.Web.Mvc.DependencyResolver.SetResolver(resolver);

            m_Logger = container.Resolve<Logging.ILogger>();

            // Resolution et chargement des paramètres de configuration du site
            m_Logger.Info("Loading site configuration");
            var settingsService = container.Resolve<Services.ISettingsService>();
            m_WebSiteSettings = settingsService.GetWebSiteSettings(m_Host);
            m_WebSiteSettings.PhysicalPath = ctx.Server.MapPath("/");

            var injectionMembers = new InjectionMember[]
            {
                new InjectionConstructor(m_WebSiteSettings.CryptoKey, m_WebSiteSettings.CryptoIV) ,
            };
            container.RegisterType<Services.CryptoService>(new ContainerControlledLifetimeManager(), injectionMembers);

            m_Logger.Info("Loading plugins");
            // Chargement des plugins
            var pluginLoaderService = container.Resolve<Extensibility.IPluginLoaderService>();
            var pluginEnumeratorService = container.Resolve<Extensibility.IPluginEnumerator>();
            var plugins = pluginEnumeratorService.EnumeratePlugins();
            pluginLoaderService.Load(plugins, (System.Web.HttpContextBase)contextBase, m_WebSiteSettings);
            m_Logger.Info("Plugins loaded");

            // Configuration des routes
            var erpStoreRoutes = container.Resolve<Services.IRoutesRegistrationService>();
            erpStoreRoutes.Register();

            // Enregistrement des routes par defaut

            RouteTable.Routes.MapERPStoreRoute(
                "Admin"
                , "admin/{action}/{id}"
                , new { controller = "Admin", action = "Index", id = string.Empty }
            );

            RouteTable.Routes.MapERPStoreRoute(
                "CatchAll"
                , "{*catchall}"
                , new { controller = "Home", action = "CatchAll" }
            );

            // Ne pas supprimer cette route
            RouteTable.Routes.MapERPStoreRoute(
                "Default",
                "{controller}/{action}/{id}",
                new { controller = "Home", action = "Index", id = string.Empty }
            );

            var eventPublisherService = container.Resolve<Services.IEventPublisher>();
            eventPublisherService.Publish(new Models.Events.RegisteredRoutesEvent());

            m_Logger.Info("Routes configured");

            // Demarrage du planificateur de taches
            var taskService = container.Resolve<Services.IScheduledTaskService>();
            taskService.Start();
            m_Logger.Info("Scheduler started");
        }
Пример #2
0
 // For tests
 public ERPStoreApplication(IUnityContainer container)
 {
     // Container = container;
     m_WebSiteSettings = null;
     m_IsWebSiteSettingsReady = true;
 }
Пример #3
0
 public void ReloadSettings()
 {
     m_WebSiteSettings = null;
 }