38 votes

Dire StructureMap d'utiliser un spécifique constructeur

J'ai deux services qui exigent un XPathDocument. Je veux être en mesure de définir les instances nommées de XPathDocumnet à utiliser dans la configuration des deux services. Je veux aussi être capable de dire StuctureMap quel constructeur de XPathDocument à utiliser. Lorsque j'essaie d'obtenir une instance de l' XPathDocument il me dit qu'il ne peut pas trouver le branché type pour XmlReader. Je veux utiliser le constructeur qui nécessite une chaîne uri du fichier xml. Je n'arrive pas à obtenir que cela fonctionne. Voici la StructureMap code de configuration.

public class Service1 : IService1 {
    public Service1(XPathDocument document) {}
}
public class Service2 : IService2 {
    public Service2(XPathDocument document) {}
}

public class Registry1 : Registry {
    ForRequestedType<IService1>().TheDefault.Is.OfConcreteType<Service1>()
        .CtorDependency<XPathDocument>()
        .Is(x => x.TheInstanceNamed("XPathDocument1"));
    ForRequestedType<IService2>().TheDefault.Is.OfConcreteType<Service2>()
        .CtorDependency<XPathDocument>()
        .Is(x => x.TheInstanceNamed("XPathDocument2"));

    ForRequestedType<XPathDocument>().AddInstances(x => {
        x.OfConcreteType<XPathDocument>()
            .WithCtorArg("uri").EqualToAppSetting("XmlFile1")
            .WithName("XPathDocument1");
        x.OfConcreteType<XPathDocument>()
            .WithCtorArg("uri").EqualToAppSetting("XmlFile2")
            .WithName("XPathDocument2");
    });
}

2voto

Lazarus Points 731

Regardez cette. En bref, vous avez besoin de changer de OfConcreteType<Service1>() de ConstructedBy(() => new Service1());.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X