有两个需要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");
});
}
答案 0 :(得分:0)
由于XPathDocument
是不受您控制的框架类型,因此您应该将其注册到工厂代理。
container.Configure(r => r.For<XPathDocument>()
.Use(() => new XPathDocument("XmlFile1"));
但是由于每个服务都需要一个dofference实例,你最好不要自己注册这个类,而只是用指定lambda委托的构造函数参数配置你的服务。