0

コードプレックス EFMVC ソリューションに基づく MVC Web サイトを開発しており、エンティティ フレームワークとリポジトリ、作業単位とコマンド パターンを使用しています。私の Web サイトは、SaaS ソリューション (サービスとしてのソフトウェア) の複数のデータベースである必要があります。私の従来の Asp.Net WebForms には、さまざまな文字列接続をすべて保持する XML ファイルがあり、同じ戦略を使用しようとしています。したがって、LoginController で、会社 (どのデータベースに接続するかを識別するため) のユーザー名とパスワードを持つコマンドを作成します。Domain プロジェクトの Validate() メソッドで、会社のフィールドに基づいて正しい文字列接続を取得するために XML を読み取っています。私の問題は、この選択した接続文字列を使用するように DatabaseFactory または DbContext を設定するにはどうすればよいですか? コンストラクターで注入する必要がありますか? 「ルールを破る」ことなく、これを正しい方法で行うための提案はありますか?

依存性注入に AutoFac を使用していることに注意してください。

ご清聴ありがとうございました。

幸運をお祈りしています、

ルイス・フェルナンド・ヴァル・ディオニジオ

4

1 に答える 1

0

Autofaq の ResolveNamed 機能を使用して、同じインターフェイスに対して異なる登録を取得できます。たとえば、次のようになります。

 builder.Register<IDataContext>(x => new DataContext(connectionStringOne))
          .Named<IDataContext>("CS1");

 builder.Register<IDataContext>(x => new DataContext(connectionStringTwo))
          .Named<IDataContext>("CS2");

そしてそれを解決するために

var context = ContainerAccessor.Container().ResolveNamed<IDataContext>("CS1"); 

もう 1 つの方法は、DataContext ctor をオーバーライドし、その要求の共有場所から構成を読み取ることです。

于 2013-03-12T18:34:32.447 に答える