zoukankan      html  css  js  c++  java
  • 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));
            }
        }
    }
  • 相关阅读:
    [转载]Javascript:history.go()和history.back()的用法和区别
    微信商户平台,开通企业付款到用户功能
    使用ASP.Net WebAPI构建REST服务——客户端
    在WebAPI使用Session
    在asp.net一般应用程序中使用session
    Web Api Post注意事项
    WebAPI返回数据类型解惑
    c#中const与readonly区别
    sql之left join、right join、inner join的区别
    C#实现json的序列化和反序列化
  • 原文地址:https://www.cnblogs.com/shiningrise/p/5568879.html
Copyright © 2011-2022 走看看