我知道如何获取当前控制器名称
HttpContext.Current.Request.RequestContext.RouteData.Values["controller"].ToString();
Run Code Online (Sandbox Code Playgroud)
但有没有办法在某个类中获取当前控制器实例(不在动作中而不在视图中)?
nem*_*esv 24
默认情况下,您只能使用视图或视图Controller内部访问控制器内的当前内容.要从某个类访问它,您需要实现一个自定义,它在某处存储控制器实例并从那里检索它.例如:ControllerContext.ControllerViewContext.ContextControllerFactoryRequest.Items
public class MyControllerFactory : DefaultControllerFactory
{
public override IController CreateController(RequestContext requestContext, string controllerName)
{
var controller = base.CreateController(requestContext, controllerName);
HttpContext.Current.Items["controllerInstance"] = controller;
return controller;
}
}
Run Code Online (Sandbox Code Playgroud)
然后你在你的注册 Application_Start:
ControllerBuilder.Current.SetControllerFactory(new MyControllerFactory());
Run Code Online (Sandbox Code Playgroud)
您可以稍后获取控制器实例:
public class SomeClass
{
public SomeClass()
{
var controller = (IController)HttpContext.Current.Items["controllerInstance"];
}
}
Run Code Online (Sandbox Code Playgroud)
但我会找到另一种方法将控制器实例传递给我的类而不是这种"hacky"解决方法.
| 归档时间: |
|
| 查看次数: |
15007 次 |
| 最近记录: |