//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; }
}
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
}
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
}