65.9K
CodeProject 正在变化。 阅读更多。
Home

在 MVC 3 中使用 ControllerActivator

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.67/5 (2投票s)

2010年10月18日

CPOL

1分钟阅读

viewsIcon

18694

如何使用 ControllerActivator 以自定义行为激活控制器

上一篇博文中,我展示了如何使用 DependencyResolver 将 **依赖注入** 行为引入 **MVC 3** 应用程序。 在本文中,我将向您展示如何使用 ControllerActivator 以自定义行为激活控制器。

IControllerActivator

在 MVC 3 beta 版本中,引入了一个新的 接口IControllerActivator。 这个 接口 是一个注入点,用于创建我们自己的行为以激活控制器。 该 接口 可以通过依赖解析器发现。 如果您没有实现该 接口 并在依赖解析器中注册它,则默认行为将使用 Activator.CreateInstance 来激活控制器。

接口 仅包含一个方法,即 Create 方法。 该方法具有与 DefaultControllerFactoryGetControllerInstance 方法相同的签名。

这里有一种使用上一篇博文中的 DependencyResolver 实现 IControllerActivator 的简单方法

public class UnityControllerActivator : IControllerActivator
{
  #region IControllerActivator Members
 
  public IController Create(RequestContext requestContext, Type controllerType)
  {
    return DependencyResolver.Current.GetService(controllerType) as IController;      
  }
 
  #endregion
}

如您所见,我使用当前的 DependencyResolver 来获取 **Unity** 行为。 当然,您可以使用其他行为来实现控制器激活。 以下是上一篇博文中的 InitContainer 方法现在的样子

private static IUnityContainer InitContainer()    
{
  var container = new UnityContainer();        
 
  // Register the relevant types for the         
  // container here through classes or configuration 

  container.RegisterType<IControllerActivator, UnityControllerActivator>();                
  container.RegisterType<IMessageService, MessageService>();

  return container;
}

我只是将 IControllerActivator 的注册添加到容器中。 现在,如果您调试应用程序并在 Create 方法中设置断点,您将看到所有控制器激活都将通过 IControllerActivator。 运行应用程序时,您将获得与上一篇博文中相同的结果

HomeController Result

摘要

在本文中,我展示了如何在 MVC 3 中挂接您自己的控制器激活行为。 这可以通过使用新的 IControllerActivator 接口来实现。 我展示的示例使用 **Unity IoC**,也可以以其他方式实现。

© . All rights reserved.