私は "ポータブル"にしたいデータアクセスレイヤライブラリを持っています。私がポータブルであることが好きな理由は、SQL Azure & Azureファイルストレージ(例:data + pdfレポート)とSql Server 2008R2とFile Systemストレージをコンクリートサーバーで使用したいからです。依存性注入コンテナ
スペックに基づいて、システムは、後の実装(SQL +ファイルシステムのストレージ)で稼動するはずですが、会議ではAzureに移行する予定の一定のスケーラビリティのしきい値があります。
私が使用するデータアクセスクラスは、(私が構築した)IDataProviderインターフェイスを実装し、データアクセスの具体的な実装に必要なメソッドを定義します。データアクセス層は、その上にメソッドをIDataProviderインターフェイスを渡し、呼び出しを介して行われるがかかり例:
public Interface IDataProvider
{
public bool DoSomething();
}
public class AzureDataProvider : IDataProvider
{
private string ConnectionString;
public AzureDataProvider(string connectionString)
{
this.ConnectionString = connectionString;
}
public AzureDataProvider():this(
ConfigurationManager.ConnectionString["conn"].ConnectionString)
{
}
public bool DoSomething()
{
return false;
}
}
だから今問題IDataProviderインターフェイス上のメソッドを呼び出すと、消費者のクラスは、次の操作を実行しなければならないことである。
public class DataAccessConsumer
{
public void SomeOperation()
{
AzureDataProvider azureProvider = new AzureDataProvider();
IDataProvider dataProvider = (IDataProvider)azureProvider;
bool result = dataProvider.DoSomething();
}
}
したがって、上記のコードの問題は、クライアントがまだ具体的なAzureDataProviderクラスの知識を持っている必要があることです。すべてのインターフェイスメソッドに接続文字列を渡すことなく、またはすべてのメソッド内でConfigurationManagerを使用して接続文字列を検索することなく、クライアントにIDataProviderインターフェイスだけを提供する方法があります。
これは可能ですか?抽象ファクトリーや何らかの依存性注入コンテナパターンがそのトリックですか?もしそうなら、私はコードサンプル、またはコードサンプルへのリンクを感謝します。
データアクセスコードはどのようなプロジェクトで使用されますか? –