将类型传递给泛型类

时间:2010-11-25 05:54:41

标签: c# entity-framework generics

我正在通过EF的ObjectStateEntry循环,所以我可以访问enrty.Entity,我正在poco类上做一些静态验证,我也想做业务规则验证,所以我创建了一个库来做到这一点,现在我有这行代码期望一个类型的例子Customer ..

 MyEntityValidator<needtypehere> ev = new MyEntityValidator<needtyehere>(new EntityValidator());

所以我遇到问题传递类型,其中我指出'needtypehere'。我尝试了entry.Entity.GetType()但没有工作。这又是方法的标志

GetErrors(this ObjectStateEntry entry)

2 个答案:

答案 0 :(得分:5)

要从Type实例调用泛型,您必须使用:

Type closedType = typeof(MyEntityValidator<>)
         .MakeGenericType(entry.Entity.GetType());
object obj = Activator.CreateInstance(closedType);

这是......尴尬 - 因为你需要做很多额外的反思工作。或者,您可以调用执行代码的通用方法

public static void InvokeGeneric<T>(...) {
    MyEntityValidator<T> ev = new MyEntityValidator<T>(
        new EntityValidator());
    ... etc; lots more code that uses ev
}
...
typeof(ContainingType).GetMethod("InvokeGeneric").MakeGenericMethod(
    entry.Entity.GetType()).Invoke(null, args);

答案 1 :(得分:0)

您可以使用MakeGenericType