アプリケーションの変数に基づいて依存クラスを変更できる状況でIoCを使用する方法を理解しようとしていますケース、セッション状態)。たとえば、クライアントごとに異なるデータベースがあるため、セッションに格納された値に基づいてデータベースへの接続を構築する必要があります(複数のビジネスを所有しているユーザーがいて、 。キークラスでセッション(または他のコンテキスト固有の変数)が必要な場合にIoCを設定する方法
public class MyTestController : ControllerBase
{
Repository _rep;
public MyTest(Repository rep)
{
_rep = rep;
}
public MyTest()
{
string connString = String.Format("Server={0}; Database={1};"
, SessionContainer.ServerName, SessionContainer.DatabaseName;
var dc = new DataContext(connString);
_rep = new Repository(dc);
}
public int SampleFn()
{
return _rep.GetCountOfEmployees();
}
}
public class Repository
{
DataContext _context;
public Repository(DataContext context)
{
_context = context;
}
}
は、我々は、デフォルトのC-TORSをのIoCを使ってこれを設定し、排除することができるようになります。
ここでは、現在この構造を設定したいかの一般的な例はありますか?もしそうなら、どうですか?私はD.I.を使用するだけで問題はありません。このように、私はStructureMapまたはUnityの可能性を探求したいと思います(注:通常、db/serverをdatacontextを構築するファクトリクラスに渡します。上記の例は簡潔にするためのものです)。
マーク - 具体的な例がありますか?複数のリポジトリオブジェクトを持つことができます。これらのオブジェクトのすべては、適切なトランザクション処理のために同じDataContextを使用する必要があります。 "DataContext"がグローバルまたはコンテナで定義された接続文字列を使用するときにIoCコンテナに登録するのに問題はありませんが、接続文字列がユーザーのセッションにあるときはどうなりますか?私は何かが明らかに欠けているように感じる。 –
私の答えに例を追加しました。 –
ああ、私は今それを得ると思います! =) 私は明日あなたに二重の勝利のためにアップアップすることができるようにあなたを下降させました。素晴らしい応答。 –