asp.net

位置:IT落伍者 >> asp.net >> 浏览文章

ASP.NET MVC 4框架揭秘:基于IoC的ControllerFactory(1)[1]


发布日期:2020年10月12日
 
ASP.NET MVC 4框架揭秘:基于IoC的ControllerFactory(1)[1]

基于IoC的ControllerFactory(

ASPNET MVC的Controller激活系统最终通过ControllerFactory来创建目标Controller对象要将IoC引入ASPNET MVC并通过对应的IoC容器实现对目标Controller的激活我们很自然地会想到自定义一个基于IoC的ControllerFactory

对于自定义ControllerFactory可以直接实现IControllerFactory接口创建一个全新的ControllerFactory类型这需要实现包括Controller类型的解析Controller实例的创建与释放以及会话状态行为选项的获取在内的所有功能一般来说Controller实例的创建才需要IoC容器的控制为了避免重新实现其他的功能可以直接继承DefaultControllerFactory重写Controller实例创建的逻辑

实例演示创建基于Unity的ControllerFactory(S

现在我们通过一个简单的实例演示如何通过自定义ControllerFactory利用Unity进行Controller的激活为了避免针对Controller类型解析会话状态行为选项的获取和对Controller对象的释放逻辑的重复定义我们直接继承DefaultControllerFactory将该自定义ControllerFactory命名为UnityControllerFactory如下面的代码片段所示UnityControllerFactory仅仅重写了受保护的虚方法GetControllerInstance将成功解析的Controller类型作为调用UnityContainer的Resolve方法的参数而返回值就是需要被激活的Controller实例

public class UnityControllerFactory: DefaultControllerFactory

{

public IUnityContainer UnityContainer { get; private set; }

public UnityControllerFactory(IUnityContainer unityContainer)

{

thisUnityContainer = unityContainer;

}

protected override IController GetControllerInstance(

RequestContext requestContext Type controllerType)

{

if (null == controllerType)

{

return null;

}

return (IController)thisUnityContainerResolve(controllerType)

}

}

整个自定义的UnityControllerFactory就这么简单为了演示IoC在它身上的体现我们在一个简单的ASPMVC实例中来使用它我们沿用在第URL路由中使用过的关于员工管理的场景如图所示本实例由两个页面(对应着两个View)组成一个用于显示员工列表另一个用于显示基于某个员工的详细信息

员工列表和员工详细信息页面

[] []

               

上一篇:ASP.NET MVC 4框架揭秘:基于IoC的ControllerFactory(1)[2]

下一篇:ASP.NET MVC 4框架揭秘:基于IoC的ControllerFactory(2)[2]