2010-11-22 21 views
0

Ceci est similaire à la question posée à StructureMap - Override constructor arguments for a named instance, mais différent dans le respect que je ne connais pas le type à codage du temps et ne peut donc pas utilisez la forme générique de GetInstance().Le passage des arguments du constructeur à une instance nommée dans le plan de la structure où le type est connu que lors de l'exécution

Ainsi, alors que:

ObjectFactory.With(IFoo).GetInstance<IBar>("foobar"); 

fonctionnera, il n'y a apparemment aucun moyen d'appeler:

ObjectFactory.With(IFoo).GetInstance(typeof(IBar), "foobar"); 

J'ai une solution en utilisant une méthode générique privée et la MakeGenericMethod() sur cette méthode privée de MethodInfo.

Comme vous pouvez l'imaginer, je ne suis pas vraiment satisfait de cette approche, mais je ne vois pas d'autre moyen de sortir de la situation.

Répondre

0

La méthode que vous voulez est GetNamedInstance(), qui ne sont pas disponibles lorsque vous utilisez la méthode avec(). Je suis sûr que ce ne serait pas trop difficile à ajouter, vous pourriez peut-être envoyer un courriel Jeremy Miller et voir s'il peut l'ajouter dans StructureMap 3. Ou soumettre un patch :)

+0

Merci pour la réponse. Je suis en train de programmer IContainer (ce que je crois être l'approche préférée). GetNamedInstance() ne fait pas partie de l'interface. Il semble que les surcharges de GetInstance() remplacent GetNamedInstance(). Je vais probablement faire un patch, mais je veux vraiment m'assurer que je n'ai pas manqué quelque chose d'abord. –