技术开发 频道

深入解读ASP.NET MVC 的依赖注入

  //IUnityMvcApplication.cs:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Practices.Unity;

/// <summary>
/// 依赖注入容器访问接口
/// </summary>
/// <remarks>
/// 2010-09-18 [Max] 创建。
/// </remarks>
public interface IUnityMvcApplication
{
    
/// <summary>
    
/// 依赖注入容器属性
    
/// </summary>
    
/// <remarks>
    
/// 2010-09-18 [Max] 创建。
    
/// </remarks>
    IUnityContainer Container {
get; }
}


 

  // 下面这两个单元的代码,由于公司的特殊应用,封装的比较死,不太好,不建议照搬,仅供参考。

  //UnityMvcApplication.cs:

using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;
using System.Reflection;
using Microsoft.Practices.Unity;

/// <summary>
/// Mvc 应用程序类。
/// </summary>
/// <remarks>
/// 2010-09-18 [Max] 创建。
/// </remarks>
public class UnityMvcApplication : HttpApplication, IUnityMvcApplication
{

    
private static IUnityContainer _UnityContainer;

    
/// <summary>
    
/// 静态依赖注入容器属性
    
/// </summary>
    
/// <remarks>
    
/// 2010-09-18 [Max] 创建。
    
/// </remarks>
    protected static IUnityContainer Container
    {
        
get
        {
            
if (_UnityContainer == null)
            {
                _UnityContainer
= new UnityContainer();
            }
            return _UnityContainer;
        }
    }

    
/// <summary>
    
/// 实现IMvcApplication接口的依赖注入容器属性
    
/// </summary>
    
/// <remarks>
    
/// 2010-09-18 [Max] 创建。
    
/// </remarks>
    IUnityContainer IUnityMvcApplication.Container
    {
        
get
        {
            return Container;
        }
    }

    
#region override methods
    
/// <summary>
    
/// 应用程序启动事件
    
/// </summary>
    
/// <remarks>
    
/// 2010-09-18 [Max] 创建。
    
/// </remarks>
    protected virtual void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();
        RegisterGlobalFilters(GlobalFilters.Filters);
        RegisterRoutes(RouteTable.Routes);
        RegisterDependency();
        RegisterControllerFactory();
    }

    
/// <summary>
    
/// 应用程序结束事件
    
/// </summary>
    
/// <param name="sender">事件发起者</param>
    
/// <param name="e">事件参数</param>
    
/// <remarks>
    
/// 2010-09-18 [Max] 创建。
    
/// </remarks>
    protected virtual void Application_End(
object sender, EventArgs e )
    {
        CleanUp();
    }
    #endregion

    
#region protected virtual methods
    
/// <summary>
    
/// 注册全局过滤器
    
/// </summary>
    
/// <param name="aFilters">全局过滤器集合</param>
    
/// <remarks>
    
/// 2010-09-18 [Max] 创建。
    
/// </remarks>
    protected virtual void RegisterGlobalFilters(GlobalFilterCollection aFilters)
    {
        aFilters.Add(
new HandleErrorAttribute());
    }

    
/// <summary>
    
/// 注册URL路由
    
/// </summary>
    
/// <param name="aRoutes">路由器对象</param>
    
/// <remarks>
    
/// 2010-09-18 [Max] 创建。
    
/// </remarks>
    protected virtual void RegisterRoutes(RouteCollection aRoutes)
    {
        aRoutes.IgnoreRoute(
"{resource}.axd/{*pathInfo}");
        aRoutes.MapRoute(
            
"Default", // Route name
            
"{controller}/{action}/{aId}", // URL with parameters
            
new { controller = "Home", action = "Index", aId = UrlParameter.Optional } // Parameter defaults
        );
    }

    
/// <summary>
    
/// 注册依赖注入对象
    
/// </summary>
    
/// <remarks>
    
/// 2010-09-18 [Max] 创建。
    
/// </remarks>
    protected virtual void RegisterDependency()
    {

    }

    
/// <summary>
    
/// 注册Controller工厂
    
/// </summary>
    
/// <remarks>
    
/// 2010-09-18 [Max] 创建。
    
/// </remarks>
    protected virtual void RegisterControllerFactory()
    {
        ControllerBuilder.Current.SetControllerFactory(typeof(UnityControllerFactory));
    }

    
/// <summary>
    
/// 清除资源
    
/// </summary>
    
/// <remarks>
    
/// 2010-09-18 [Max] 创建。
    
/// </remarks>
    protected virtual void CleanUp()
    {
        
if (_UnityContainer != null)
        {
            _UnityContainer.Dispose();
        }
    }
    #endregion

}

 

0
相关文章