简而言之 - 我希望能够根据运行时参数实例化对象。在这种特殊情况下,只有两个参数,但问题是我面临这些参数的不同排列并且变得混乱。
情况如下:我想获取特定于特定国家/地区的对象实例,然后是特定州/省。因此,考虑到美国,有 50 种可能的组合。实际上它比那个少,但这是最大值。这样想,我想知道在给定的国家/州吸大麻的惩罚是什么,我把这些信息传递进去,然后我得到实例化的对象告诉我它是什么。
代码(仅供参考):
interface IState
{
string Penalty { get; }
}
interface ICountry
{
IState State { get; set; }
string Name { get; }
}
class BasePenalty : IState
{
virtual public string Penalty { get { return "Slap on a wrist"; } }
}
class USA : ICountry
{
public USA(IState state)
{
State = state;
}
public IState State { get; set; }
public string Name { get { return "USA"; } }
}
class Florida: BasePenalty
{
public override string Penalty { get { return "Public beheading"; } }
}
// and so on ... I defined other states
// which have penalties other than the "Slap on a wrist"
如何配置我的容器,当给定国家和州组合时,它将返回惩罚?我尝试了配置文件和上下文绑定的组合,但该配置与我创建的类的数量成正比。我已经经历了定义不同组合的麻烦。我想避免在容器配置期间做同样的事情。我想将状态注入国家。另外,如果未指定状态,我想返回 UsaBasePenalty 值。那可能吗?也许这些是设计的问题。