2016-03-18 11 views
0

データ・リポジトリ内のメソッド呼び出しごとに複数のDbCOntextを作成するプロジェクトをリファクタリングしています。 したがって、HTTP要求ごとに1つのDbContextインスタンスを作成したいとします。Unityを使用してリクエストごとにDbContextの単一インスタンスを使用する方法

container.RegisterType<ApplicationDbContext>(new PerRequestLifetimeManager()); 

を、すべてのリポジトリのために:

私がやることを試みた

... 
container.RegisterType<IBusinessRepository, BusinessRepository>(new InjectionConstructor(new ApplicationDbContext())); 
container.RegisterType<ICountryRepository, CountryRepository>(); 
... 

しかし、それはもちろん、リポジトリあたりDbContext()の新しいインスタンスを作成します。

私は

container.RegisterType<IBranchCategoryRepository, BranchCategoryRepository>( 
new InjectionConstructor(container.Resolve<ApplicationDbContext>())); 

を試してみました。しかし、それは私を与える:

PerRequestLifetimeManagerのみ HTTPリクエストのコンテキストで使用することができます。考えられる原因は、非asP.NETアプリケーション上で有効期間 を使用しているか、該当する同期コンテキストに関連付けられていない のスレッドで使用していることです。

どのようにして同じリポジトリに同じインスタンスを挿入できますか?

答えて

2

私はUnityに精通していませんが、私は様々な他のIoCフレームワークを持っています。

なぜリポジトリに注入するものを設定しようとしていますか?

container.RegisterType<IBusinessRepository, BusinessRepository>(new InjectionConstructor(new ApplicationDbContext())); 

ただ、ここでDbContextを残したが、それを変更します、それは自動的に依存関係を持っている各クラスのコンストラクタに注入されますあなたは既にこのコンポーネントを登録しなかったので

container.RegisterType<IBusinessRepository, BusinessRepository>(); 

。あなたのクラスは次のようになります:

これはCastle Windsorで動作します。

+0

ありがとう、私はそれを仮定しましたが、私は処理されない例外があります。有効になったAPIトレースの後、私は何が起こっているのかを認識しました。依存関係が壊れている他のクラスがありました。私はあなたの答えを受け入れるでしょう、それは別の観点から私にそれを見させました。 –

関連する問題