J'ai une interface qui prend un type génériqueproblème de résolution Unity lors de la configuration par XML avec le nom de dépendance enregistré
interface IIFace<T>
Alors j'ai plusieurs implémentations
public class IFaceImp1 : IIFace<MyObj> {}
public class IFaceImp2 : IIFace<MyObj> {}
je définissais une viewmodel qui obtient injecté dans c'est un objet de cette interface pour un type spécifique ...
public MainViewModel(IIFace<MyObj> scrapper) { }
Et puis je configurer l'unité pour le remplir
<containers>
<container>
<register type="IIFace[MyObj]" mapTo="IFaceImp1">
<constructor>
<param name="loc" value="i am just a mock">
</param>
</constructor>
</register>
</container>
</containers>
Cela fonctionne bien Le problème est, maintenant je voulais créer des enregistrements nommés, afin que je puisse les résoudre plus tard par son nom ... Donc, je l'ai appelé, et en a créé un autre en premier, mais ça n'a pas marché. Je réduit le problème à ceci:
<containers>
<container>
<register type="IIFace[MyObj]" mapTo="IFaceImp1" name="FirstImplementation">
<constructor>
<param name="loc" value="i am just a mock">
</param>
</constructor>
</register>
</container>
</containers>
Ce qui ne fonctionne pas non plus ... wh en essayant de résoudre <> ("FirstImplementation"). Cependant, si je supprime l'attribut name et utilise la surcharge Resolve <>(), ça fonctionne bien .. Des idées sur ce qui pourrait arriver, qu'avoir un nom cela ne fonctionne pas?
Je pense que le problème est que lorsqu'il n'y a pas de nom, en essayant d'instancier MainViewModel, Unity appelle le type enregistré par défaut dans le conteneur. Cependant, quand il a un nom, il n'y a aucun moyen de définir ce nom dans l'appel Register. Je pense que (peut-être que je me trompe) j'ai besoin de dire à l'unité d'une façon ou d'une autre qu'il y a une dépendance nommée à l'intérieur, mais je ne sais pas comment faire ça –