J'ai une classe de génériques, qui utilise TBase comme paramètre de type. En utilisant MEF, je voulais une liste de type générique qu'il devrait importer. J'ai essayé d'utiliser ceci:Classe générique MEF avec constructeur comme contrat de type
1)
[ImportMany(typeof(TBase))]
public List<TBase> ObjectList { get; set; }
2)
Type IValueType = typeof(TBase)
[ImportMany(IValueType)]
public List<TBase> ObjectList{ get; set; }
3)
[ImportMany(TBase)]
public List<TBase> ObjectList{ get; set; }
Les premiers spectacles
{'TBase': an attribute argument cannot use type parameters
}
Le second montre
{An object reference is required for the non-static field, method, or property
}
la troisième montre
{'TBase' is a 'type parameter' but is used like a 'variable'
}
Qu'est-ce que je fais mal ici? Comment puis-je le réparer?
Oui, si TBase est un argument générique, il n'est pas connu au moment de la compilation et je ne crois pas qu'il vous permettra d'incorporer cette information dans un attribut. Cependant, comme le fait remarquer Igor, vous pouvez simplement laisser la valeur hors de l'attribut ImportMany qui amènera MEF à regarder le type de la propriété pour obtenir le type de contrat, dans ce cas quel que soit le type de TBase pour les instances d'objet. Gardez cependant à l'esprit que le MEF ne prend pas en charge les génériques ouverts pour l'instant, afin que cela apparaisse dans le catalogue, il devra être sur un type générique fermé. –