Пример #1
0
 public string GetUrl()
 {
     if (this.IsExternalUrl)
     {
         var abstractContext = new System.Web.HttpContextWrapper(System.Web.HttpContext.Current);
         return(UrlHelper.GenerateContentUrl(NavigateUrl, abstractContext));
     }
     return(this.NavigateUrl);
 }
        private static System.Web.HttpContextWrapper GetHttpContextWrapper(string url)
        {
            var request            = new System.Web.HttpRequest(string.Empty, url, null);
            var response           = new System.Web.HttpResponse(null);
            var context            = new System.Web.HttpContext(request, response);
            var httpContextWrapper = new System.Web.HttpContextWrapper(context);

            return(httpContextWrapper);
        }
        private static HtmlHelper GetHtmlHelper(System.Web.HttpContextWrapper httpContextWrapper)
        {
            var dummyViewContext = new ViewContext();

            dummyViewContext.HttpContext = httpContextWrapper;
            var dummyViewDataContainer = (IViewDataContainer) new ViewPage();
            var htmlHelper             = new System.Web.Mvc.HtmlHelper(dummyViewContext, dummyViewDataContainer);

            return(htmlHelper);
        }
Пример #4
0
        /// <summary>
        /// Creates fake (empty) Mvc controller to allow render the view
        /// </summary>
        /// <returns></returns>
        private System.Web.Mvc.Controller createController()
        {
            System.Web.Mvc.Controller mvcController = new Controllers.MvcController();

            System.Web.HttpContextWrapper wrapper   = new System.Web.HttpContextWrapper(System.Web.HttpContext.Current);
            System.Web.Routing.RouteData  routeData = new System.Web.Routing.RouteData();
            routeData.Values.Add("controller", controllerName);

            mvcController.ControllerContext = new System.Web.Mvc.ControllerContext(wrapper, routeData, mvcController);

            return(mvcController);
        }
Пример #5
0
        public static MerchantTribe.Commerce.RequestContext GetFakeRequestContext(string fileName, string url, string querystring)
        {
            var result = new MerchantTribe.Commerce.RequestContext();

            var request = new System.Web.HttpRequest(fileName, url, querystring);
            var response = new System.Web.HttpResponse(new System.IO.StringWriter());
            System.Web.HttpContext httpContext = new System.Web.HttpContext(request, response);
            System.Web.HttpContextWrapper httpWrapper = new System.Web.HttpContextWrapper(httpContext);
            result.RoutingContext = new System.Web.Routing.RequestContext(httpWrapper,
                new System.Web.Routing.RouteData());

            return result;
        }
Пример #6
0
 /// <summary>
 /// Returns an System.Web.HttpContextBase for the current System.Web.HttpContext.
 /// Facilitates efficient consolidation of methods that require support for both
 /// System.Web.HttpContext/System.Web.HttpContextBase typed params.
 /// This method is optimised such that the System.Web.HttpContextBase instance returned is only created
 /// once per request.
 /// NB: this may involve a per-appdomain lock when reading from the items dictionary.
 /// </summary>
 public static System.Web.HttpContextBase GetHttpContextBase(this System.Web.HttpContext context)
 {
     // This value is created afresh first time this method is called per request,
     // and cached for the request's remaining calls to this method.
     System.Web.HttpContextBase hcb = context.Items["i18n.System.Web.HttpContextBase"] as System.Web.HttpContextBase;
     if (hcb == null)
     {
         context.Items["i18n.System.Web.HttpContextBase"]
               = hcb
               = new System.Web.HttpContextWrapper(context);
     }
     return(hcb);
 }
Пример #7
0
        void Application_BeginRequest(object sender, System.EventArgs e)
        {
            System.Web.HttpContextBase context = new System.Web.HttpContextWrapper(System.Web.HttpContext.Current);
            RouteData rd = RouteTable.Routes.GetRouteData(context);

            if (rd != null)
            {
                string controllerName = rd.GetRequiredString("controller");
                string actionName     = rd.GetRequiredString("action");
                //Response.Write("c:" + controllerName + " a:" + actionName);
                //Response.End();
            }
        }
Пример #8
0
 /// <summary>
 /// Returns an System.Web.HttpContextBase for the current System.Web.HttpContext.
 /// Facilitates efficient consolidation of methods that require support for both 
 /// System.Web.HttpContext/System.Web.HttpContextBase typed params.
 /// This method is optimised such that the System.Web.HttpContextBase instance returned is only created
 /// once per request.
 /// NB: this may involve a per-appdomain lock when reading from the items dictionary.
 /// </summary>
 public static System.Web.HttpContextBase GetHttpContextBase(this System.Web.HttpContext context)
 {
     // This value is created afresh first time this method is called per request,
     // and cached for the request's remaining calls to this method.
     System.Web.HttpContextBase hcb = context.Items["i18n.System.Web.HttpContextBase"] as System.Web.HttpContextBase;
     if (hcb == null)
     {
         context.Items["i18n.System.Web.HttpContextBase"] 
             = hcb 
             = new System.Web.HttpContextWrapper(context);
     }
     return hcb;
 }
Пример #9
0
        public UmbracoSchedulerViewModel GetLoggedInUsers()
        {
            string   userName = string.Empty, role = string.Empty;
            bool     isAdmin         = false;
            DateTime currentDateTime = new DateTime();

            bool  isLoggedInUser = false;
            IUser currentUser    = null;

            var userTicket = new System.Web.HttpContextWrapper(System.Web.HttpContext.Current).GetUmbracoAuthTicket();

            if (userTicket != null)
            {
                isLoggedInUser = true;
                currentUser    = ApplicationContext.Services.UserService.GetByUsername(userTicket.Name);
            }

            if (isLoggedInUser)
            {
                userName = currentUser.Name;
                isAdmin  = currentUser.IsAdmin();

                if (currentUser.IsAdmin())
                {
                    role = "Admin";
                }
                else
                {
                    //currentUser.UserState.
                    FormsAuthentication.SignOut();
                    //return RedirectToCurrentUmbracoPage();
                }
            }

            var homePageId       = Umbraco.TypedContent(1064);
            var scheduleDateTime = homePageId.GetPropertyValue <DateTime>("startDate");

            currentDateTime = DateTime.Now;


            var vm = new UmbracoSchedulerViewModel
            {
                Name             = userName,
                IsAdmin          = isAdmin,
                Role             = role,
                CurrentDateTime  = currentDateTime,
                ScheduleDateTime = scheduleDateTime
            };

            return(vm);
        }
Пример #10
0
        public static MerchantTribe.Commerce.RequestContext GetFakeRequestContext(string fileName, string url, string querystring)
        {
            var result = new MerchantTribe.Commerce.RequestContext();

            var request  = new System.Web.HttpRequest(fileName, url, querystring);
            var response = new System.Web.HttpResponse(new System.IO.StringWriter());

            System.Web.HttpContext        httpContext = new System.Web.HttpContext(request, response);
            System.Web.HttpContextWrapper httpWrapper = new System.Web.HttpContextWrapper(httpContext);
            result.RoutingContext = new System.Web.Routing.RequestContext(httpWrapper,
                                                                          new System.Web.Routing.RouteData());

            return(result);
        }
Пример #11
0
 public static string RenderViewToString(string controllerName, string viewName, object viewData)
 {
     using (var writer = new StringWriter())
     {
         var routeData = new System.Web.Routing.RouteData();
         routeData.Values.Add("controller", controllerName);
         var httpRequest           = new System.Web.HttpRequest(null, "http://google.com", null);
         var contextWrapper        = new System.Web.HttpContextWrapper(new System.Web.HttpContext(httpRequest, new System.Web.HttpResponse(null)));
         var fakeControllerContext = new System.Web.Mvc.ControllerContext(contextWrapper, routeData, new FakeController());
         fakeControllerContext.RouteData = routeData;
         var razorViewEngine = new System.Web.Mvc.RazorViewEngine();
         var razorViewResult = razorViewEngine.FindView(fakeControllerContext, viewName, "", false);
         var viewContext     = new System.Web.Mvc.ViewContext(fakeControllerContext, razorViewResult.View, new System.Web.Mvc.ViewDataDictionary(viewData), new System.Web.Mvc.TempDataDictionary(), writer);
         razorViewResult.View.Render(viewContext, writer);
         return(writer.ToString());
     }
 }
Пример #12
0
        /// <summary>
        /// 写数据库
        /// </summary>
        /// <param name="e"></param>
        private void WriteDatabase(HttpActionExecutedContext filterContext)
        {
            System.Web.HttpContextWrapper context = ((System.Web.HttpContextWrapper)filterContext.Request.Properties["MS_HttpContext"]);
            string controllerName = filterContext.ActionContext.ControllerContext.ControllerDescriptor.ControllerName;
            string actionName     = filterContext.ActionContext.ActionDescriptor.ActionName;
            string httpMethod     = filterContext.Request.Method.ToString();

            SyLogErrorAdd data = new SyLogErrorAdd();

            data.ControllerName = controllerName;
            data.ActionName     = actionName;
            data.HttpMethod     = httpMethod;
            data.Url            = filterContext.Request.RequestUri.ToString();
            data.Message        = filterContext.Exception.Message;
            data.CreateIp       = Common.Function.GetIp(context.Request);
            data.CreateTime     = DateTime.Now;
            BigdataBll.SyLogErrorApi_Add(data);
        }
Пример #13
0
        private bool _IsAuthrized(System.Web.HttpContextBase httpContextBase, string url)
        {
            System.Security.Principal.IPrincipal user = httpContextBase.User;
            bool result;

            try
            {
                HttpWorkerRequest             request            = new Authorization.SimpleHttpWorkerRequest(url);
                HttpContext                   httpContext        = new HttpContext(request);
                System.Web.HttpContextWrapper httpContextWrapper = new System.Web.HttpContextWrapper(httpContext);
                System.Web.Routing.RouteData  routeData          = System.Web.Routing.RouteTable.Routes.GetRouteData(httpContextWrapper);
                httpContext.User = user;
                System.Web.HttpContextBase        _httpContextBase = new System.Web.HttpContextWrapper(httpContext);
                System.Web.Routing.RequestContext requestContext   = new System.Web.Routing.RequestContext(_httpContextBase, routeData);
                string             controllerName = requestContext.RouteData.GetRequiredString("controller");
                string             actionName     = requestContext.RouteData.GetRequiredString("action");
                IControllerFactory factory        = ControllerBuilder.Current.GetControllerFactory();
                try
                {
                    IController controller = factory.CreateController(requestContext, controllerName);
                    if (controller is ControllerBase)
                    {
                        ControllerContext controllerContext = new ControllerContext(requestContext, controller as ControllerBase);
                        result = this.invoker.IsAuthrized(controllerContext, actionName);
                    }
                    else
                    {
                        result = true;
                    }
                }
                catch (System.Exception)
                {
                    result = false;
                }
            }
            catch
            {
                result = false;
            }
            return(result);
        }
    public IHttpHandler GetHttpHandler(RequestContext requestContext)
    {
        UmbracoContext current = UmbracoContext.Current;

        if (current == null)
        {
            var httpBase = new System.Web.HttpContextWrapper(System.Web.HttpContext.Current);
            current = UmbracoContext.EnsureContext(
                httpBase,
                ApplicationContext.Current,
                new WebSecurity(httpBase, ApplicationContext.Current),
                UmbracoConfig.For.UmbracoSettings(),
                UrlProviderResolver.Current.Providers,
                false);
        }
        IPublishedContent publishedContent = this.FindContent(requestContext, current);

        if (publishedContent == null)
        {
            return(new NotFoundHandler());
        }


        Uri originalRequestUrl = requestContext.HttpContext.Request.Url;

        Uri cleanedUmbracoUrl = UriUtility.UriToUmbraco(originalRequestUrl);

        current.PublishedContentRequest = new PublishedContentRequest(cleanedUmbracoUrl, current.RoutingContext, UmbracoConfig.For.UmbracoSettings().WebRouting, (string s) => Roles.Provider.GetRolesForUser(s))
        {
            PublishedContent = publishedContent
        };
        this.PreparePublishedContentRequest(current.PublishedContentRequest);
        RenderModel value = new RenderModel(current.PublishedContentRequest.PublishedContent, current.PublishedContentRequest.Culture);

        requestContext.RouteData.DataTokens.Add("umbraco", value);
        requestContext.RouteData.DataTokens.Add("umbraco-doc-request", current.PublishedContentRequest);
        requestContext.RouteData.DataTokens.Add("umbraco-context", current);
        requestContext.RouteData.DataTokens.Add("umbraco-custom-route", true);

        return(new MvcHandler(requestContext));
    }
Пример #15
0
        /// <summary>
        /// 执行结束
        /// </summary>
        /// <param name="filterContext"></param>
        public override void OnActionExecuted(HttpActionExecutedContext filterContext)
        {
            if (filterContext.Request.Properties.ContainsKey(Key))
            {
                var stopWatch = filterContext.Request.Properties[Key] as Stopwatch;
                if (stopWatch != null)
                {
                    stopWatch.Stop();

                    System.Web.HttpContextWrapper context = ((System.Web.HttpContextWrapper)filterContext.Request.Properties["MS_HttpContext"]);
                    string controllerName = filterContext.ActionContext.ActionDescriptor.ControllerDescriptor.ControllerName;
                    string actionName     = filterContext.ActionContext.ActionDescriptor.ActionName;
                    string httpMethod     = filterContext.Request.Method.ToString();

                    SyLogMonitorAdd data = new SyLogMonitorAdd();
                    data.ControllerName = controllerName;
                    data.ActionName     = actionName;
                    data.HttpMethod     = httpMethod;
                    data.Url            = filterContext.Request.RequestUri.ToString();
                    data.CreateIp       = Common.Function.GetIp(context.Request);
                    data.CreateTime     = DateTime.Now;
                    data.ResponseTime   = Convert.ToDecimal(stopWatch.Elapsed.TotalSeconds);

                    //if (filterContext.HttpContext.Session["UserInfo"] != null)
                    //{
                    //    Common.Model.UserInfo user = filterContext.HttpContext.Session["UserInfo"] as Common.Model.UserInfo;
                    //    if (user != null)
                    //    {
                    //        data.CreateUserId = user.Id;
                    //        data.CreateUserName = user.Name;
                    //    }
                    //}
                    BigdataBll.SyLogMonitorApi_Add(data);
                }
            }

            //base.OnActionExecuted(filterContext);
        }
Пример #16
0
        private static string GetResponseFileName(string prefix, string ext)
        {
            var context = new System.Web.HttpContextWrapper(System.Web.HttpContext.Current);

            return(String.Format(CultureInfo.InvariantCulture, "{0}-{1}-{2:MM-dd-HH-mm-ss}.{3}", prefix, InstanceIdUtility.GetShortInstanceId(context), DateTime.UtcNow, ext));
        }
Пример #17
0
        /// <summary>
        /// Processa a requisição.
        /// </summary>
        /// <returns></returns>
        public async override Task <object> Handle()
        {
            var context     = new Microsoft.Owin.OwinContext(Environment);
            var wr          = new HttpWorkerRequestWrapper(context);
            var httpContext = new System.Web.HttpContext(wr);

            httpContext.User            = System.Threading.Thread.CurrentPrincipal;
            httpContext.Request.Browser = new System.Web.HttpBrowserCapabilities()
            {
                Capabilities = new System.Collections.Hashtable()
            };
            System.Web.HttpContext.Current = httpContext;
            System.Web.HttpContextBase httpContextBase = null;
            httpContextBase = new System.Web.HttpContextWrapper(httpContext);
            httpContext.Request.Form.HasKeys();
            HttpContext.Current = new HttpContext(context, httpContextBase.Request, httpContextBase.Response);
            var route = base.GetRoute(httpContextBase);

            context.Response.Headers.Add("Server", new[] {
                "Colosoft 1.0"
            });
            if (_application != null)
            {
                _application.OnBeginRequest(context, EventArgs.Empty);
            }
            if (_application != null)
            {
                _application.OnAuthenticateRequest(context, EventArgs.Empty);
            }
            httpContext.User = System.Threading.Thread.CurrentPrincipal;
            System.Web.Routing.IRouteHandler routeHandler = null;
            if (route != null)
            {
                routeHandler = route.RouteHandler;
                if (routeHandler == null)
                {
                    throw new InvalidOperationException("NoRouteHandler");
                }
            }
            if (route != null && !(routeHandler is System.Web.Routing.StopRoutingHandler))
            {
                var requestContext = new System.Web.Routing.RequestContext(httpContextBase, route);
                var httpHandler    = route.RouteHandler.GetHttpHandler(requestContext);
                if (httpHandler == null)
                {
                    throw new InvalidOperationException(string.Format("NoHttpHandler {0}", routeHandler.GetType()));
                }
                try
                {
                    if (httpHandler is System.Web.IHttpAsyncHandler)
                    {
                        var asyncHandler = (System.Web.IHttpAsyncHandler)httpHandler;
                        await Task.Factory.FromAsync <System.Web.HttpContext>(asyncHandler.BeginProcessRequest, asyncHandler.EndProcessRequest, httpContext, null);
                    }
                    else
                    {
                        httpHandler.ProcessRequest(httpContext);
                    }
                }
                catch (Exception ex)
                {
                    if (!FinishRequest(wr, httpContext, ex))
                    {
                        wr.SendStatus(400, "Bad Request");
                        wr.SendKnownResponseHeader(12, "text/html; charset=utf-8");
                        byte[] data = Encoding.ASCII.GetBytes("<html><body>Bad Request </ br>" + ex.ToString() + "</body></html>");
                        wr.SendResponseFromMemory(data, data.Length);
                        wr.FlushResponse(true);
                    }
                }
                if (httpContextBase.Response.StatusCode == 401)
                {
                    httpContextBase.Response.Redirect(string.Format("/login?returnurl={0}", context.Request.Uri.AbsolutePath));
                }
            }
            else
            {
                var path = this.RequestPath;
                if (System.Web.Hosting.HostingEnvironment.VirtualPathProvider.FileExists(path))
                {
                    var file  = System.Web.Hosting.HostingEnvironment.VirtualPathProvider.GetFile(path);
                    var index = path.LastIndexOf('.');
                    if (index >= 0)
                    {
                        var extension   = path.Substring(index);
                        var contentType = Colosoft.Web.ExtendedHtmlUtility.TranslateContentType(extension);
                        if (!string.IsNullOrEmpty(contentType))
                        {
                            httpContextBase.Response.ContentType = contentType;
                        }
                    }
                    var      cacheControl        = httpContextBase.Request.Headers["Cache-Control"];
                    var      ifModifiedSince     = httpContextBase.Request.Headers["If-Modified-Since"];
                    DateTime ifModifiedSinceDate = DateTime.Now;
                    if (!string.IsNullOrEmpty(ifModifiedSince) && DateTime.TryParseExact(ifModifiedSince, "ddd,' 'dd' 'MMM' 'yyyy' 'HH':'mm':'ss' GMT'", System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.AssumeUniversal | System.Globalization.DateTimeStyles.AdjustToUniversal, out ifModifiedSinceDate))
                    {
                        if (file is Web.Hosting.IPhysicalFileInfo && ((Web.Hosting.IPhysicalFileInfo)file).LastWriteTimeUtc.ToString("yyyy/MM/dd HH:mm:ss") == ifModifiedSinceDate.ToString("yyyy/MM/dd HH:mm:ss"))
                        {
                            httpContextBase.Response.StatusCode = 304;
                            httpContextBase.Response.Flush();
                            if (_application != null)
                            {
                                _application.OnEndRequest(context, EventArgs.Empty);
                            }
                            return(await Task.FromResult <object>(null));
                        }
                    }
                    httpContextBase.Response.AddHeader("Age", "25000");
                    httpContextBase.Response.AddHeader("Cache-Control", "max-age=10000, public");
                    httpContextBase.Response.AddHeader("Date", string.Format(System.Globalization.CultureInfo.InvariantCulture, HTTP_DATEFORMAT, DateTimeOffset.UtcNow));
                    httpContextBase.Response.AddHeader("Expires", string.Format(System.Globalization.CultureInfo.InvariantCulture, HTTP_DATEFORMAT, DateTimeOffset.UtcNow.AddYears(1)));
                    httpContextBase.Response.AddHeader("Vary", "*");
                    if (file is Web.Hosting.IPhysicalFileInfo)
                    {
                        var physicalFile = (Web.Hosting.IPhysicalFileInfo)file;
                        httpContextBase.Response.AddHeader("Content-Length", physicalFile.ContentLength.ToString());
                        httpContextBase.Response.AddHeader("Last-Modified", string.Format(System.Globalization.CultureInfo.InvariantCulture, HTTP_DATEFORMAT, physicalFile.LastWriteTimeUtc));
                    }
                    httpContextBase.Response.Flush();
                    if (file != null)
                    {
                        System.IO.Stream outstream = httpContextBase.Response.OutputStream;
                        var    read   = 0;
                        byte[] buffer = new byte[81920];
                        using (var inputStream = file.Open())
                        {
                            while ((read = inputStream.Read(buffer, 0, buffer.Length)) > 0)
                            {
                                outstream.Write(buffer, 0, read);
                            }
                        }
                        outstream.Flush();
                    }
                }
                else
                {
                    httpContextBase.Response.StatusCode = 404;
                    var virtualPath = "~/Views/404.html";
                    if (System.Web.Hosting.HostingEnvironment.VirtualPathProvider.FileExists(virtualPath))
                    {
                        var virtualFile = System.Web.Hosting.HostingEnvironment.VirtualPathProvider.GetFile(virtualPath);
                        using (var stream = virtualFile.Open())
                        {
                            var reader = new System.IO.StreamReader(stream, httpContextBase.Response.ContentEncoding);
                            var writer = new System.IO.StreamWriter(httpContextBase.Response.OutputStream, httpContextBase.Response.ContentEncoding);
                            writer.Write(reader.ReadToEnd());
                            writer.Flush();
                        }
                    }
                }
            }
            httpContextBase.Response.Flush();
            if (_application != null)
            {
                _application.OnEndRequest(context, EventArgs.Empty);
            }
            return(Task.FromResult <object>(null));
        }
Пример #18
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");
        }