• Autofac.Integration.Mvc分析


    Autofac.Integration.Mvc

    static ILifetimeScope LifetimeScope
            {
                get { return (ILifetimeScope)HttpContext.Current.Items[typeof(ILifetimeScope)]; }
                set { HttpContext.Current.Items[typeof(ILifetimeScope)] = value; }
            }
    namespace Autofac.Integration.Mvc
    {
        /// <summary>
        /// An <see cref="IHttpModule"/> and <see cref="ILifetimeScopeProvider"/> implementation 
        /// that creates a nested lifetime scope for each HTTP request.
        /// </summary>
        internal class RequestLifetimeHttpModule : IHttpModule
        {
            /// <summary>
            /// Gets the lifetime scope provider that should be notified when a HTTP request ends.
            /// </summary>
            internal static ILifetimeScopeProvider LifetimeScopeProvider { get; private set; }
    
            /// <summary>
            /// Initializes a module and prepares it to handle requests.
            /// </summary>
            /// <param name="context">An <see cref="T:System.Web.HttpApplication"/> that provides access to the 
            /// methods, properties, and events common to all application objects within an ASP.NET application</param>
            /// <exception cref="System.ArgumentNullException">
            /// Thrown if <paramref name="context" /> is <see langword="null" />.
            /// </exception>
            public void Init(HttpApplication context)
            {
                if (context == null)
                {
                    throw new ArgumentNullException("context");
                }
                context.EndRequest += OnEndRequest;
            }
    
            /// <summary>
            /// Disposes of the resources (other than memory) used by the module that implements <see cref="T:System.Web.IHttpModule"/>.
            /// </summary>
            public void Dispose()
            {
            }
    
            public static void SetLifetimeScopeProvider(ILifetimeScopeProvider lifetimeScopeProvider)
            {
                if (lifetimeScopeProvider == null) throw new ArgumentNullException("lifetimeScopeProvider");
    
                LifetimeScopeProvider = lifetimeScopeProvider;
            }
    
            static void OnEndRequest(object sender, EventArgs e)
            {
                if (LifetimeScopeProvider != null)
                    LifetimeScopeProvider.EndLifetimeScope();
            }
        }
    }
    using System.ComponentModel;
    using Microsoft.Web.Infrastructure.DynamicModuleHelper;
    
    namespace Autofac.Integration.Mvc
    {
        /// <summary>
        /// Container class for the ASP.NET application startup method.
        /// </summary>
        [EditorBrowsable(EditorBrowsableState.Never)]
        public static class PreApplicationStartCode
        {
            private static bool _startWasCalled;
    
            /// <summary>
            /// Performs ASP.NET application startup logic early in the pipeline.
            /// </summary>
            public static void Start()
            {
                // Guard against multiple calls. All Start calls are made on the same thread, so no lock needed here.
                if (_startWasCalled) return;
    
                _startWasCalled = true;
                DynamicModuleUtility.RegisterModule(typeof(RequestLifetimeHttpModule));
            }
        }
    }
  • 相关阅读:
    Struts2 技术全总结 (正在更新)
    Servlet 技术全总结 (已完成,不定期增加内容)
    字节顺序&字节对齐
    Kubernetes 清除持续 Terminating 状态的Pods
    [K8s]无yaml文件重启Pod
    外部访问docker容器(docker run -p/-P 指令)
    Linux (OpenBSD)系统目录分析
    CPU Cache 机制以及 Cache miss
    ifconfig 中的 eth0 eth0:1 eth0.1 与 lo
    MYSQL 文件类型
  • 原文地址:https://www.cnblogs.com/shiningrise/p/5568879.html
走看看 - 开发者的网上家园