示例代码被大大简化了。要点是,我们有一个广泛使用 MEF 的项目。每个基于 MEF 的接口都实现了 IPlugin:
public interface IPlugin
{
ImplementationName ImplementationName {get;}
bool TryProvide(FeatureName name);
}
public interface IFoo : IPlugin ...
public interface IBar : IPlugin ...
所有接口都有一个抽象的基础实现
public abstract class FooBase : IFoo
{
public abstract ImplementationName ImplementationName {get;}
protected virtual Regex FeaturePattern {get;}
public virtual bool TryProvide(FeatureName name)
{
return name.ToString() == ImplementationName.ToString()
|| (FeaturePattern != null && FeaturePattern.IsMatch(name.ToString()));
}
...
}
所有抽象基础(当前)独立实现两种算法之一。一个只查看 ImplementationName,而另一个包括 FeaturePattern 测试。我想集中维护算法。
我会特别感兴趣的是一种不会将算法暴露给主机应用程序直接使用的方式,例如对 ImplementationName 或 FeatureName 的扩展方法。