Экспортные генерики в MEF
Я хочу экспортировать общий класс в общий интерфейс через MEF. Мои объекты:
public interface IService<T> { }
[Export(typeof(IService<T>))] // error!!!!!!
public class Service<T> { }
public class Client<T> {
[Import]
private IService<T> _service;
}
Но когда я пытаюсь экспортировать IService<T>
, я получаю эту ошибку:
Аргумент атрибута не может использовать параметры типа
Может ли кто-нибудь помочь мне сделать это, пожалуйста?
Ответы
Ответ 1
Try
[Export(typeof(IService<>))]
Чтобы получить определение общего типа из оператора typeof
, вы опускаете аргументы типа. Для типов с более чем одним параметром типа используйте запятые, чтобы указать "arity" этого типа. Например:
typeof(List<>) // not: typeof(List<T>)
typeof(IDictionary<,>) // not: typeof(IDictionary<K, V>)
Ответ 2
Open generic не поддерживается MEF (из коробки).
Вам нужен вклад MEF.
Здесь ссылка
http://blogs.msdn.com/b/gblock/archive/2009/08/20/open-generic-support-in-mef-contrib.aspx