您的位置:首页 > 其它

Mvc如何重写控制器工厂!

2018-01-05 09:30 267 查看
直接上代码,主要看红色文字,在这里根据自己项目需求获取到控制器的type。

public class CustomControllerFactory : DefaultControllerFactory
{
/// <summary>
/// 根据控制器名称及请求信息获得控制器类型。
/// </summary>
/// <param name="requestContext">请求信息</param>
/// <param name="controllerName">控制器名称。</param>
/// <returns>控制器类型。</returns>
protected override Type GetControllerType(RequestContext requestContext, string controllerName)
{
Type controllerType = null;
//路由中包含pluginName才重写, 反射动态加载的控制器必须重写控制器工厂。
if (requestContext.RouteData.Values.ContainsKey("pluginName"))
{
string pluginName = requestContext.RouteData.Values["pluginName"].ToString();
controllerType = this.GetControllerType(pluginName, controllerName);
}
else
{
controllerType = base.GetControllerType(requestContext, controllerName);
if (controllerType != null)
{
if (requestContext.RouteData.DataTokens.ContainsKey("Namespaces"))
{
string[] nameSpaces = (string[])requestContext.RouteData.DataTokens["Namespaces"];
//把默认优先级改为直接限制
if (!nameSpaces.Contains(controllerType.Namespace))
{
return null;
}
}
}
}
return controllerType;
}
.....


重写必须继承DefaultControllerFactory,然后在启动时候注册,注册方式,可以在global文件的Application_Start()中注册,代码如下:

ControllerBuilder.Current.SetControllerFactory(new CustomControllerFactory()); //重新注册控制器工厂


也可以通过特性自启动,代码如下:

[assembly: System.Web.PreApplicationStartMethod(typeof(PageAdmin.Plugin.Bootstrapper), "Initialize")]
namespace PageAdmin.Plugin
{
/// <summary>
/// 引导程序。
/// </summary>
public static class Bootstrapper
{
/// <summary>
/// 初始化。
/// </summary>
public static void Initialize()
{
//注册插件控制器工厂。
ControllerBuilder.Current.SetControllerFactory(new PluginControllerFactory());
...............
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: