我有三种类型的算法,每种都采用不同的参数类型进行处理。
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();
现在的问题是,提供必要的参数作为属性显然是错误的,但另一方面,如果我将它们作为构造函数参数提供,它将违背模式的目的。
你会怎么做 ?