Скажите StructureMap использовать конкретный конструктор - PullRequest
38 голосов
/ 11 декабря 2008

У меня есть две службы, которые требуют XPathDocument. Я хочу иметь возможность определять именованные экземпляры XPathDocumnet для использования в конфигурации двух служб. Я также хочу иметь возможность сказать StuctureMap, какой конструктор XPathDocument использовать. Когда я пытаюсь получить экземпляр XPathDocument, он говорит мне, что не может найти подключенный тип для XmlReader. Я хочу использовать конструктор, который требует строку URI для файла XML. Я не могу заставить это работать. Вот код конфигурации StructureMap.

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");
    });
}

1 Ответ

2 голосов
/ 27 декабря 2013

Посмотрите на это . Короче говоря, вам нужно изменить OfConcreteType<Service1>() на ConstructedBy(() => new Service1());.

...