厳密に分離されたインターフェースを必要とするモジュールに取り組んでいます。具体的には、ルートオブジェクト(データソース)をインスタンス化した後、ユーザーはインターフェイスを介してオブジェクトモデルと対話することのみを想定しています。これらのインターフェイスを実装するインスタンスを提供するための実際のファクトリオブジェクト(プロバイダーと呼んでいます)がありますが、プロバイダーを取得するのが面倒です。そのために、データソースにいくつかのメソッドを提供しました。
public class MyDataSource
{
private Dictionary<Type, Type> providerInterfaceMapping = new Dictionary<Type, Type>()
{
{ typeof(IFooProvider), typeof(FooProvider) },
{ typeof(IBarProvider), typeof(BarProvider) },
// And so forth
};
public TProviderInterface GetProvider<TProviderInterface>()
{
try
{
Type impl = providerInterfaceMapping[typeof(TProviderInterface)];
var inst = Activator.CreateInstance(impl);
return (TProviderInterface)inst;
}
catch(KeyNotFoundException ex)
{
throw new NotSupportedException("The requested interface could not be provided.", ex);
}
}
}
簡略化するために、その場でいくつかの詳細を変更しました(たとえば、このコードスニペットには、作成された実装インスタンスに渡されるパラメーターが含まれていません)。これは、C#でファクトリメソッドを実装するための優れた一般的なアプローチですか?