我的方法有这样的约束:
public class MappingTransformation
{
public static ClassMapped<T> Convert<T>(Mapping<T> source) where T : class
{
return ClassMapped<T>.GetInstance(source);
}
}
这个T必须是引用类型,因为它将被传递给EntityTypeConfiguration。
但是,当使用 MappingTransformation.Convert&lt;&gt;(映射源)时,我只有一个Type,并且不知道如何将此Type转换为所需的“引用类型”。
以下是我尝试使用它的方法:
#region Test
foreach (var item in mappingAssembly.GetTypes())
{
var mappingObj = Activator.CreateInstance(item);
var modelName = mappingObj.GetType().GetProperty("ModelName").GetValue(mappingObj);
var modelTypeEquivalent = modelAssembly.GetTypes().First(x => x.Name.Equals(modelName));
var convertido = MappingTransformation.Convert<Model.Clientes>((Mapping<Model.Clientes>)mappingObj);
var breakpoint = true;
}
#endregion
如何实现这一目标?
答案 0 :(得分:1)
以前从不回答我自己的问题,但我想我明白了。还在测试,但我想我明白了。
阅读Stack Overflow的其他一些问题,我来到了这个:
#region Test
foreach (var item in mappingAssembly.GetTypes())
{
var mappingObj = Activator.CreateInstance(item);
var modelName = mappingObj.GetType().GetProperty("ModelName").GetValue(mappingObj);
var modelTypeEquivalent = modelAssembly.GetTypes().First(x => x.Name.Equals(modelName));
var convertionMethod = typeof(MappingTransformation).GetMethod("Convert");
var genericConvertionMethod = convertionMethod.MakeGenericMethod(modelTypeEquivalent);
var result = genericConvertionMethod.Invoke(null, new object[] { mappingObj });
var breakpoint = true;
}
#endregion
This was the question引导我得到Jon Skeet先生的回答。
答案 1 :(得分:0)
我想我明白了。
看起来你想在运行时定义泛型函数的类型,就像这样?
var modelTypeEquivalent = modelAssembly.GetTypes().First(x => x.Name.Equals(modelName));
var convertido = MappingTransformation.Convert<modelTypeEquivalent >((Mapping<Model.Clientes>)mappingObj);
您想要找到类型,然后将其作为通用类型传递,是吗?
这实际上比你想象的要棘手。应用于泛型函数和类的类型必须在编译时定义,而不是在运行时定义。
要做你想做的事,你需要使用更多的反射see this related question for an example。