我正在通过EF的ObjectStateEntry循环,所以我可以访问enrty.Entity,我正在poco类上做一些静态验证,我也想做业务规则验证,所以我创建了一个库来做到这一点,现在我有这行代码期望一个类型的例子Customer ..
MyEntityValidator<needtypehere> ev = new MyEntityValidator<needtyehere>(new EntityValidator());
所以我遇到问题传递类型,其中我指出'needtypehere'。我尝试了entry.Entity.GetType()但没有工作。这又是方法的标志
GetErrors(this ObjectStateEntry entry)
答案 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。