如何在MVC控制器中投射System.Type

本文关键字:System Type 控制器 MVC | 更新日期: 2023-09-27 18:20:51

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

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();

那么呢?

如何在MVC控制器中投射System.Type

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

您可以使用创建类型的对象

Activator.CreateInstance(type);