在 MVC 3 中使用 ControllerActivator
如何使用 ControllerActivator 以自定义行为激活控制器
在上一篇博文中,我展示了如何使用 DependencyResolver
将 **依赖注入** 行为引入 **MVC 3** 应用程序。 在本文中,我将向您展示如何使用 ControllerActivator
以自定义行为激活控制器。
IControllerActivator
在 MVC 3 beta 版本中,引入了一个新的 接口
– IControllerActivator
。 这个 接口
是一个注入点,用于创建我们自己的行为以激活控制器。 该 接口
可以通过依赖解析器发现。 如果您没有实现该 接口
并在依赖解析器中注册它,则默认行为将使用 Activator.CreateInstance
来激活控制器。
该 接口
仅包含一个方法,即 Create
方法。 该方法具有与 DefaultControllerFactory
的 GetControllerInstance
方法相同的签名。
这里有一种使用上一篇博文中的 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
。 运行应用程序时,您将获得与上一篇博文中相同的结果
摘要
在本文中,我展示了如何在 MVC 3 中挂接您自己的控制器激活行为。 这可以通过使用新的 IControllerActivator 接口
来实现。 我展示的示例使用 **Unity IoC**,也可以以其他方式实现。