Экспортные генерики в 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>)