如何在MVC控制器中转换System.Type?

时间:2012-01-19 12:15:48

标签: c# asp.net .net asp.net-mvc casting

所以,我需要得到一个控制器的区域,我用这种方式得到控制器:

var assembly = System.Reflection.Assembly.GetCallingAssembly();
var controllers = from type in assembly.GetTypes()
                  where type.Name.Contains("Controller")
                  select type;

好的,通过这种方式我拥有所有控制器,但它们是Type,我如何在MVC控制器中投射?因为我需要得到像这样的控制器区域:

string area = controller.ControllerContext.RouteData.DataTokens["area"].ToString();

因此?

2 个答案:

答案 0 :(得分:2)

您无法将Type转换为对象的实例。这没有意义。您可以通过查看type.FullName来检查定义此类型的命名空间,并且是了解此Type所代表的控制器在哪个Area中定义的唯一方法。顺便检查给定类型是否为使用type.Name.Contains("Controller")的控制器似乎非常脆弱和脆弱。你最好使用where typeof(Controller).IsAssignableFrom(type);

答案 1 :(得分:0)

您可以使用

创建类型的对象
Activator.CreateInstance(type);