Скажите StructureMap использовать конкретный конструктор
У меня есть две услуги, которые требуют 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 ответ
Посмотри на это. Короче нужно поменять OfConcreteType<Service1>()
в ConstructedBy(() => new Service1());
,