一言で言えば、ランタイムパラメータに基づいてオブジェクトをインスタンス化できるようにしたいのです。この特定のケースでは、パラメーターは 2 つしかありませんが、問題は、これらのパラメーターのさまざまな順列に直面していて、面倒なことです。
状況は次のとおりです。たとえば、特定の国に固有のオブジェクトのインスタンスを取得し、次に特定の州/県に固有のオブジェクトのインスタンスを取得したいと考えています。したがって、米国を考慮すると、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 値を返したいと思います。それは可能ですか?おそらく、これらは設計上の問題です。