2008-12-11 11 views
38

Ich habe zwei Dienste, die eine XPathDocument erfordern. Ich möchte in der Lage sein, benannte Instanzen von XPathDocumnet für die Konfiguration der beiden Dienste zu definieren. Ich möchte auch in der Lage sein, zu sagen, welcher Konstruktor von XPathDocument zu verwenden ist. Wenn ich versuche, eine Instanz von XPathDocument zu bekommen, sagt es mir, dass es den verstopften Typ für XmlReader nicht finden kann. Ich möchte den Konstruktor verwenden, der eine Zeichenfolge uri für die XML-Datei benötigt. Ich kann das nicht zur Arbeit bringen. Hier ist der Strukturierungskonfigurationscode.Erzählen Sie StructureMap, um einen bestimmten Konstruktor zu verwenden

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

mögliche Duplikate von [StructureMap: Wie Standardkonstruktor von Code zu definieren?] (Http://stackoverflow.com/questions/289512/strucemapmap-how-to-define-default-constructor-by-code) –

+3

Siehe [ http://StackOverflow.com/questions/289512/Structuremap-how-to-define-default-constructor-by-code](http://stackoverflow.com/questions/289512/structemap-how-to-define-default -Konstruktor nach Code) –

Antwort

2

Betrachten Sie this. Kurz gesagt, Sie müssen OfConcreteType<Service1>() zu ConstructedBy(() => new Service1()); ändern.

Verwandte Themen