2

現在、Windows サービスと MVC アプリに Unity を使用していますが、問題なく動作しています。Web リクエストごとに ChildContainer を作成し、DbContext インジェクションを階層として定義するため、各 Web リクエストにはコンテキストの独自のインスタンスがあります。また、EF 設定がすべてのコンテキストで一貫していることを確認する BaseDbContext クラスもあります。

ここまでは順調ですね。ここでの問題は、2 つ目のデータベースを追加することです。したがって、BaseDbContext からも継承する 2 つ目のコンテキストが追加されます。

基本クラスが同じであるため、異なるコンテキストを挿入するように Unity を構成することはできません。

私たちが見つけた解決策は、T : BaseDbContext である ContextProviderを作成し、それを Unity に登録することでした。これにより、タイプによってコンテキストを区別できます。

ただし、Unity はこのシナリオを処理できるはずなので、これは正しくないようです。

この問題を処理するための提案されたアプローチは何ですか?

ありがとう。

4

1 に答える 1

0

名前付き登録を使用して、同じタイプの 2 つの登録を行うことができます。

Container
  .RegisterType<BaseDbContext>("context1", ...)
  .RegisterType<BaseDbContext>("context2", ...)

そして、クライアント コードでは:

public void MyClass {

   public MyClass([Dependency("context1")] BaseDbContext context1, 
                  [Dependency("context2")] BaseDbContext context2) {
         ....
   }
}
于 2013-02-25T12:04:26.267 に答える