2008-12-11 7 views
38

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 enchufado 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.Dile a StructureMap que use un constructor específico

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

posible duplicado de [StructureMap: ¿Cómo definir el constructor predeterminado por código?] (Http://stackoverflow.com/questions/289512/structuremap-how-to-define-default-constructor-by-code) –

+3

Ver [ http://stackoverflow.com/questions/289512/structuremap-how-to-define-default-constructor-by-code](http://stackoverflow.com/questions/289512/structuremap-how-to-define-default -constructor-por-código) –

Respuesta

2

Mirar this. En resumen, debe cambiar OfConcreteType<Service1>() a ConstructedBy(() => new Service1());.

Cuestiones relacionadas