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

时间:2011-10-31 10:38:53

标签: c# interface structuremap

我想使用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接口)。

1 个答案:

答案 0 :(得分:12)

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

For<MasterPolicy>.Use<MasterPolicy>()
    .Ctor<IPolicy>("alphaPolicy").Is<AlphaPolicy>()
    .Ctor<IPolicy>("numericPolicy").Is<NumericPolicy>();