Configuration 如何:基于运行时参数的结构映射和配置?

Configuration 如何:基于运行时参数的结构映射和配置?,configuration,parameters,runtime,structuremap,Configuration,Parameters,Runtime,Structuremap,简而言之,我希望能够基于运行时参数实例化对象。在这个特殊的例子中,只有两个参数,但问题是我面对的是这些参数的不同排列,它变得很混乱 情况是这样的:我想得到一个对象的实例,比如说,特定的国家,然后是特定的州/省。因此,考虑到美国,有50种可能的组合。事实上,它比这个小,但这是最大值。这样想,我想知道在一个给定的国家/州,吸大麻的惩罚是什么,我传递这个信息,我得到一个实例化的对象,告诉我它是什么 参考本规范(仅供参考): 如何配置容器,使其在给定国家和州组合时返回惩罚?我尝试了配置文件和上下文绑定的

简而言之,我希望能够基于运行时参数实例化对象。在这个特殊的例子中,只有两个参数,但问题是我面对的是这些参数的不同排列,它变得很混乱

情况是这样的:我想得到一个对象的实例,比如说,特定的国家,然后是特定的州/省。因此,考虑到美国,有50种可能的组合。事实上,它比这个小,但这是最大值。这样想,我想知道在一个给定的国家/州,吸大麻的惩罚是什么,我传递这个信息,我得到一个实例化的对象,告诉我它是什么

参考本规范(仅供参考):


如何配置容器,使其在给定国家和州组合时返回惩罚?我尝试了配置文件和上下文绑定的组合,但这种配置与我创建的类的数量成正比。我已经经历了定义不同组合的麻烦。我希望避免在容器配置期间执行同样的操作。我想把国家注入这个国家。另外,我希望在未指定状态的情况下返回USABASEPAULT值。可能吗?也许这是设计上的问题。

我通常使用工厂来解决这类问题。我将首先删除
IState
/
ICountry
接口,并将其替换为更具体的
ipnalytcalculator
。让工厂接收所有实例(
IEnumerable
在工厂的构造函数中)。然后,通过将上下文信息(当前状态、国家/地区)作为参数传递给工厂,要求工厂提供正确的实例。
IPenaltyCalculator
还有一个附加方法:
bool AppliesTo(字符串状态,字符串国家)
。工厂对它们进行循环,并返回第一个从
AppliesTo
返回
true
。如果没有返回true,请返回您的
DefaultPenaltyCalculator

+1以获取有趣的示例!不过,我很难理解它的逻辑。但一般来说,如果您想基于运行时参数实例化对象,为什么不创建一个工厂来创建这样的对象呢?不排除依赖注入。谢谢你的帮助和建议。这被证明是正确的方法。获取一个实例的任务永远不应该通过实例化其类型的所有实现来完成。这种方法是否存在主要的性能和逻辑问题。
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"