用T4模板反思

时间:2011-09-26 17:25:44

标签: c# asp.net-mvc templates t4

我有一个名为VideoGame的模型类。我需要在这个方法中使用反射在t4模板中传递类。

MethodInfo[] methodInfos =
    typeof(type).GetMethods(BindingFlags.Public | BindingFlags.Static);

我有以下变数。

//passed via powershell file - is a string "VideoGame"
var modelName = Model.modelName
Type type = modelName.GetType();

我收到一条错误消息:无法找到类型或命名空间名称“type”(您是否缺少using指令或程序集引用?)。我需要知道的是如何在typeof()方法中传递VideoGame类。我尝试过以下方法:

MethodInfo[] methodInfos =
    typeof(modelName.GetType()).GetMethods(BindingFlags.Public | BindingFlags.Static);
MethodInfo[] methodInfos =
    modelName.GetType.GetMethods(BindingFlags.Public | BindingFlags.Static);
MethodInfo[] methodInfos =
    typeof(modelName).GetMethods(BindingFlags.Public | BindingFlags.Static);

2 个答案:

答案 0 :(得分:1)

typeof(modelName.GetType())永远不会起作用,因为modelName.GetType()返回一个System.String的运行时类型。

modelName.GetType有同样的问题。

typeof(modelName)将不起作用,因为modelName是一个字符串,而typeof需要一个Type。

所以....如果你有一个字符串“VideoGame”,你想获得TypeGame上的方法......

我愿意:

Type.GetType(modelName).GetMethods()

Type.GetType将按指定的名称返回Type。请注意,这需要一个程序集限定名称....所以仅提供VideoGame是不够的。您需要modelName采用以下形式:

MyNamespace.VideoGame, MyAssemblyThatContainsVideoGame

此外,这意味着无论运行什么T4代码都需要引用MyAssemblyThatContainsVideoGame。

答案 1 :(得分:0)

如果您想将名称作为字符串传递,请使用Activator.CreateInstance