2012-02-15 16 views
11

Chcę wyeksportować ogólną klasę do ogólnego interfejsu przez MEF. Moje obiekty są:Generics eksportu w MEF

public interface IService<T> { } 

[Export(typeof(IService<T>))] // error!!!!!! 
public class Service<T> { } 

public class Client<T> { 
    [Import] 
    private IService<T> _service; 
} 

Ale gdy próbuję eksportować IService<T>, otrzymuję ten błąd:

Attribute argument cannot use type parameters

Czy ktoś mnie prowadził w tym celu proszę?

+0

Przy okazji polecam, aby określić interfejs jak: 'klasy publicznej służby gdzie T: IMyInterface' – rekire

Odpowiedz

20

Spróbuj

[Export(typeof(IService<>))] 

Aby uzyskać ogólną definicję typu od operatora typeof, pominąć argumenty typu. W przypadku typów z więcej niż jednym parametrem wpisz przecinki, aby wskazać "arity" typu. Na przykład:

typeof(List<>)    // not: typeof(List<T>) 
typeof(IDictionary<,>)  // not: typeof(IDictionary<K, V>)