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