私には3つのタイプのアルゴリズムがあり、それぞれが処理に必要な異なるパラメータータイプを取ります。
class AlgorithmA
{
Execute(int param);
}
class AlgorithmB
{
Execute(string param);
}
class AlgorithmC
{
Execute();
}
MEFで戦略パターンを採用するために、私は次のことを行いました。
interface IAlgorithm
{
int IntegerParam{get;set;}
string StringParam{get;set;}
string AlgorithmName {get;}
void Execute();
}
とクライアントで:
[ImportMany]
IEnumerable<IAlgorithm> Algorithms { get; set; }
IAlgorithm algorithm=Algorithms.Single(a => a.AlgorithmName == name);
algorithm.IntegerParam=integerParam;
algorithm.StringParam=stringParam;
algorithm.Execute();
ここで問題は、必要なパラメーターをプロパティとして提供することは明らかに間違っていますが、一方で、コンストラクターパラメーターとして提供すると、パターンの目的そのものが無効になります。
あなたならどうしますか ?