2008-12-11 10 views
38

Mam dwie usługi, które wymagają XPathDocument. Chcę móc zdefiniować nazwane instancje XPathDocumnet do użycia w konfiguracji obu usług. Chcę również móc poinformować StuctureMap, z którego konstruktora będzie korzystać XPathDocument. Kiedy próbuję pobrać instancję o numerze XPathDocument, oznacza to, że nie może znaleźć typu podłączonego do XmlReader. Chcę użyć konstruktora, który wymaga uri ciąg dla pliku xml. Nie wydaje mi się, żeby to działało. Oto kod konfiguracji StructureMap.Powiedz StructureMap, aby użyć określonego konstruktora.

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

możliwy duplikat [StructureMap: Jak zdefiniować domyślny konstruktor według kodu?] (Http://stackoverflow.com/questions/289512/structuremap-how-to-define-default-construktor-by-code) –

+3

Zobacz [ http://stackoverflow.com/questions/289512/structuremap-how-to-define-default-constructor-by-code](http://stackoverflow.com/questions/289512/structuremap-how-to-define-default -konstruktor po kodzie) –

Odpowiedz

2

Spójrz na this. Krótko mówiąc, musisz zmienić OfConcreteType<Service1>() na ConstructedBy(() => new Service1());.

Powiązane problemy