C# StructureMap:具体类构造函数接受相同接口类型的多个参数

C# StructureMap:具体类构造函数接受相同接口类型的多个参数,c#,interface,structuremap,C#,Interface,Structuremap,我想使用StructureMap ObjectFactory来处理WCF服务使用的类的实例化。虽然我有限的经验足以处理一个接口和实现它的单一类之间的简单1:1映射,但我遇到了一个障碍,构造函数接受同一接口的多个参数 我认为通过给每个映射一个名称,我可以将多个具体类关联到同一个接口,但是如何告诉StructureMap第一个和第二个构造函数参数使用什么映射呢 这是我希望ObjectFactory为我处理的类: public class MasterPolicy { public Maste

我想使用StructureMap ObjectFactory来处理WCF服务使用的类的实例化。虽然我有限的经验足以处理一个接口和实现它的单一类之间的简单1:1映射,但我遇到了一个障碍,构造函数接受同一接口的多个参数

我认为通过给每个映射一个名称,我可以将多个具体类关联到同一个接口,但是如何告诉StructureMap第一个和第二个构造函数参数使用什么映射呢

这是我希望ObjectFactory为我处理的类:

public class MasterPolicy {
    public MasterPolicy(IPolicy alfaPolicy, IPolicy numericPolicy)
    {
        AlphaPolicy = alphaPolicy;
        NumericPolicy = numericPolicy;
    }

    public IPolicy AlphaPolicy {get; private set; }
    public IPolicy NumericPolicy {get; private set; }

    public bool IsValid(string s)
    {
         if (!AlphaPolicy.IsValid(s)) return false;
         if (!NumericPolicy.IsValid(s)) return false;
         return true;
    }
}
IPolicy接口由多个类实现:

public interface IPolicy
{
    bool IsValid(string s);
}

public class AlphaPolicy : IPolicy
{
    public bool IsValid(string s) { return true; }
}

public class NumericPolicy : IPolicy
{
    public bool IsValid(string s) { return true; }
}

(当然,MasterPolicy也可以实现IPolicy接口)。

您可以指定构造函数依赖项,并告诉结构映射哪个命名参数应该具有哪个依赖项:

For<MasterPolicy>.Use<MasterPolicy>()
    .Ctor<IPolicy>("alphaPolicy").Is<AlphaPolicy>()
    .Ctor<IPolicy>("numericPolicy").Is<NumericPolicy>();
For.Use()
.Ctor(“alphaPolicy”).Is()
.Ctor(“数字政策”).Is();

谢谢!这正是我更好地掌握StructureMap所需要的。这使得主策略类与容器紧密耦合,你不这么认为吗?@Kevorkian-
MasterPolicy
完全没有对容器的引用,所以我不知道它如何与容器有任何耦合。容器将对其引导/组合的所有类进行控制耦合。@PHeiberg我的意思是,如果我更改MasterPolicy构造函数的签名,例如:
public MasterPolicy(IPolicy APolicy,IPolicy NPolicy){AlphaPolicy=AlphaPolicy;NumericPolicy=NumericPolicy;}
另一个问题,如果在新的初始化过程中更改参数的顺序会发生什么?@Kevorkian-因为有两个类型相同的参数,我们需要指定参数的名称,这使得它很脆弱。如果参数的名称更改,则还需要更改Ctor配置。顺序无关紧要只要名字正确。