如何告诉StructureMap使用特定的构造函数?

如何告诉StructureMap使用特定的构造函数?,structuremap,Structuremap,有两个需要XPathDocument的服务。我希望能够定义XPathDocumnet的命名实例,以便在两个服务的配置中使用。我还希望能够告诉StuctureMap使用哪个XPathDocument构造函数。当我尝试获取XPathDocument实例时,它告诉我它找不到XmlReader的插入类型。我想使用需要xml文件的字符串uri的构造函数。我好像没法让它工作。以下是StructureMap配置代码 public class Service1 : IService1 { public

有两个需要XPathDocument的服务。我希望能够定义XPathDocumnet的命名实例,以便在两个服务的配置中使用。我还希望能够告诉StuctureMap使用哪个XPathDocument构造函数。当我尝试获取XPathDocument实例时,它告诉我它找不到XmlReader的插入类型。我想使用需要xml文件的字符串uri的构造函数。我好像没法让它工作。以下是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");
    });
}
因为XPathDocument是一种不受您控制的框架类型,所以您应该向工厂委托注册它

container.Configure(r => r.For<XPathDocument>()
    .Use(() => new XPathDocument("XmlFile1"));
但是,由于每个服务都需要一个doDifference实例,因此最好不要注册此类本身,而只使用构造函数参数配置服务,在该参数中指定lambda委托。

请检查此处重复的问题
container.Configure(r => r.For<XPathDocument>()
    .Use(() => new XPathDocument("XmlFile1"));