c# - Dile a StructureMap que use un constructor específico
xmlreader xpathdocument (1)
Tengo dos servicios que requieren un XPathDocument
. Quiero poder definir instancias con nombre de XPathDocumnet
para usar en la configuración de los dos servicios. También quiero poder decirle a StuctureMap qué constructor de XPathDocument
usar. Cuando trato de obtener una instancia de XPathDocument
, me dice que no puede encontrar el tipo conectado para XmlReader
. Quiero usar el constructor que requiere una cadena uri para el archivo xml. Parece que no puedo hacer que esto funcione. Aquí está el código de configuración de 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");
});
}
Mira esto . En resumen, debe cambiar OfConcreteType<Service1>()
a OfConcreteType<Service1>()
ConstructedBy(() => new Service1());
.