public class Global : SystemWebHttpApplication
{
protected void Application_Start(object sender EventArgs e)
{
//其他操作
ControllerBuilderCurrentSetControllerFactory(
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 BuildManagerGetReferencedAssemblies())
{
foreach (Type type in assemblyGetTypes()Where(
type => typeof(IController)IsAssignableFrom(type)))
{
controllerTypesAdd(type)
}
}
}
public IController CreateController(RequestContext requestContext
string controllerName)
{
string typeName = controllerName + Controller;
Type controllerType = controllerTypesFirstOrDefault(
c => stringCompare(typeName cName true) == )
if (null == controllerType)
{
return null;
}
return (IController)ActivatorCreateInstance(controllerType)
}
}
返回目录ASPNET MVC 框架揭秘
编辑推荐
ASP NET开发培训视频教程
Microsoft NET框架程序设计视频教程
Java程序性能优化让你的Java程序更快更稳定
Visual C++音频/视频技术开发与实战
[] []