框架已安装 但未激活 ASP.NET MVC 4框架揭秘:Controller的激活(2)[2]
ASP.NET MVC 4框架揭秘:Controller的激活(2)[2]
public class Global : System Web HttpApplication
{
protected void Application_Start(object sender EventArgs e)
{
//其他操作
ControllerBuilder Current SetControllerFactory(
new DefaultControllerFactory())
}
}
作为默认ControllerFactory的DefaultControllerFactory类型定义如下 激活Controller对象的前提是能够正确解析出Controller的真实类型 作为CreateController方法输入参数的controllerName仅仅表示Controller的名称 我们需要加上Controller字符后缀作为类型名称 在DefaultControllerFactory类型被加载的时候(静态构造函数被调用) 通过BuildManager加载所有引用的程序集 并得到所有实现了接口IController的类型并将其缓存起来 在CreateController方法中根据Controller的名称和命名空间从保存的Controller类型列表中得到对应的Controller类型 并通过反射的方式创建它
public class DefaultControllerFactory : IControllerFactory
{
private static List<Type> controllerTypes = new List<Type>()
static DefaultControllerFactory()
{
foreach (Assembly assembly in BuildManager GetReferencedAssemblies())
![框架已安装 但未激活 ASP.NET MVC 4框架揭秘:Controller的激活(2)[2]](http://img.zhputi.com/uploads/d44a/d44a1da8a38ed3a42a5a4545d9a17ce449779.jpg)
{
foreach (Type type in assembly GetTypes() Where(
type => typeof(IController) IsAssignableFrom(type)))
{
controllerTypes Add(type)
}
}
}
public IController CreateController(RequestContext requestContext
string controllerName)
{
string typeName = controllerName + Controller ;
Type controllerType = controllerTypes FirstOrDefault(
c => string Compare(typeName c Name true) == )
if (null == controllerType)
{
return null;
}
return (IController)Activator CreateInstance(controllerType)
}
}
返回目录ASP NET MVC 框架揭秘
编辑推荐
ASP NET开发培训视频教程
Microsoft NET框架程序设计视频教程
Java程序性能优化 让你的Java程序更快 更稳定
Visual C++音频/视频技术开发与实战
lishixinzhi/Article/program/net/201311/16107