7

すべては、ユニティ生涯マネジャー&EFデータコンテキスト - >ベストプラクティス

ユニティ生涯マネージャに関する記事がたくさんありましたが、私は、誰かがこれらのケースでは「のために親指の良いルールを述べる見つけるには至っていませんあなたは常にXを使うべきです。私のアプリケーションを記述しましょう、私はASP.NET MVC 4 Webアプリケーションを持っています。私は3つのプロジェクト、私のEFのもの、テストプロジェクト、MVC Webプロジェクトのすべてを持っている私の 'コア'プロジェクトを含むVisual Studioのソリューションを持っています。しかし、私は(私を聞かせて私のコンテキストが、私は私が欲しいと思うものですすべての新しいWebリクエストで再作成されていないことに気づいてい

// Context 
container.RegisterType<IDatabaseFactory, DatabaseFactory>(
    new ContainerControlledLifetimeManager(); 
container.RegisterType<UnitOfWork>(
    new ContainerControlledLifetimeManager()); 

を:私は依存性の注入のためのUnityに使用して、今、次のコードを持っています私がその仮定で間違っているかどうかを知る)。私は、下記のサイトからすべての情報を分析するのに苦労しており、これを処理するPerHttpRequestLifetimeManagerという名前の独自のクラスを作成する多くの人について読んでいます。

本当にここでベストプラクティスは何ですか?

    Microsoftの開発者向けネットワークによって
  1. 理解生涯マネージャ - CodeProjectの経由生涯Managerとhttp://msdn.microsoft.com/en-us/library/ff660872(v=PandP.20).aspx
  2. MVC DI &ユニティ - http://www.codeproject.com/Articles/424743/MVC-DI-Unity-with-Lifetime-Manager
  3. ASP.NET MVCヒント:シジューVargheseさんのブログ経由ユニティアプリケーションブロックとの依存性注入 - http://weblogs.asp.net/shijuvarghese/archive/2008/10/24/asp-net-mvc-tip-dependency-injection-with-unity-application-block.aspx
  4. MVC、EF - DataContextシングルトンインスタンススタックオーバフローによるUnityのWeb-Per-Request - MVC, EF - DataContext singleton instance Per-Web-Request in Unity
  5. Inject same DataContexスタックオーバーフローを介してUnityを使用していくつかのタイプに渡ってインスタンス化する - Inject same DataContext instance across several types with Unity
+0

関連:http://stackoverflow.com/questions/10585478/one-dbcontext-per-web-request-why。 – Steven

答えて

6

はい、通常、リクエストごとに1つのDbContextが必要です。

PerHttpRequestLifetimeManagerまたはすべての要求に対して作成された子コンテナは、これが処理される典型的な方法です。

Unityの最新のリリースでは、という新しく組み込まれたライフタイムマネージャを持つUnity bootstrapper for ASP.NET MVCが導入されています。

Developer's Guide to Dependency Injection Using Unityの第3章Dependency Injection with Unityで詳しく読むことができます。

+2

ちょっとランディ!少し古い答えが、私の問題は実際にこれに関連しています。私はUnityで自分のコンテキストを登録するために 'PerRequestLifetimeManager'を使っています:' Container.RegisterType (新しいPerRequestLifetimeManager()、新しいInjectionConstructor()); ' - しかし、DbContextはリクエストごとに決して配置されません。私はこの行を 'RegisterTypes'メソッドにも含めました:' DynamicModuleUtility.RegisterModule(typeof(UnityPerRequestHttpModule)); 'しかし、これを行うと、要求が終了する前にDbContextが破棄されます。何か案は? –

関連する問題