2009-05-01 104 views
0

可能重复:
How can I get controller type and action info from a url or from route data?如何通过其名称获取控制器类型

我有控制器的名字和他们的行动的名单。我需要做的是从这些操作的自定义属性中读取值。 问题是,似乎没有简单的方法来获取控制器类型(其余部分很简单。) ASP.NET MVC框架在DefaultControllerFactory中具有此功能,但它不能在框架之外访问。 这似乎不是一个好主意,重新发明并实现它自己,特别是因为MVC框架缓存控制器类型,我需要复制。 有没有更好的解决方案?


Upd。 Accessing the list of Controllers/Actions in an ASP.NET MVC application描述了一个类似但不同的问题。我不需要确定可以执行哪些控制器/操作,我需要获取单个控制器的类型。

+0

可能有助于看看:http://stackoverflow.com/questions/2690779/how-can-i-get-controller-type-and-action-info-from-a-url-or-from-轨迹数据 – Luciano 2012-05-31 21:19:54

回答

0

我不是很清楚你需要做什么。如果你需要做到这一点你的MVC应用程序里面,那么你可以实现自己的控制器工厂,并把你的代码在那里,存储与键安装在控制器类型的高速缓存的结果 - 例如:

public class CustomControllerFactory : DefaultControllerFactory 
{ 
    protected override IController GetControllerInstance(Type controllerType) 
    { 
    // do something with controller attributes on controllerType here the 
    // first time a controller is seen and store the results in a 
    // static cache keyed on the controller type 

    return base.GetControllerInstance(controllerType); 
    } 
} 

,然后注册一个的ControllerFactory在应用程序启动(如在Global.asax中):

ControllerBuilder.Current.SetControllerFactory(new CustomControllerFactory()); 

或者,你可以简单地使用反射来寻找你的组件与“控制器”结尾的所有类和运行代码,在那里 - 再次,我米不清楚你需要这种事情发生的地方。

0

由于您已经有了一个类型名称列表,使用反射来遍历程序集,检索类型和迭代操作,检查是否存在有趣的属性,可能是最直接的方法。我还没有做足够多的ASP.Net MVC爬行,以了解是否有可能从MVC中的控制器缓存中提取类型信息的方法...

或者,如果您可以请求缓存中的对象每个控制器类型(以及ASP.Net MVC控制器,或者更具体地说是您的控制器,都足够便宜,可以为我构建或构建并缓存未知数据),检索系统中的每个控制器并检索它们的类型可能是更直接。

相关问题