передать тип в общий класс - PullRequest
1 голос
/ 25 ноября 2010

Я выполняю цикл через ObjectStateEntry EF, чтобы получить доступ к enrty.Entity. Я выполняю некоторую статическую проверку для классов poco и хочу также выполнить проверку бизнес-правил, поэтому я создал для этого библиотеку, теперь у меня естьэта строка кода, которая ожидает типовой пример Customer ..

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

, поэтому у меня возникла проблема с передачей типа, где я указал 'needtypehere'.Я попытался entry.Entity.GetType (), но не работает.Опять же, это подпись метода

GetErrors(this ObjectStateEntry entry)

Ответы [ 2 ]

5 голосов
/ 25 ноября 2010

Чтобы вызвать дженерики из экземпляра 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);
0 голосов
/ 25 ноября 2010

Вы можете использовать MakeGenericType .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...