サンプル コードは大幅に簡略化されています。要点は、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()));
}
...
}
すべての抽象ベース (現在) は、2 つのアルゴリズムのいずれかを個別に実装しています。1 つは ImplementationName のみを調べ、もう 1 つは FeaturePattern テストを含めます。アルゴリズムのメンテナンスを一元化したいと考えています。
ImplementationName や FeatureName への拡張メソッドのように、ホスト アプリケーションがアルゴリズムを直接使用できないようにする方法に特に興味があります。