7

All,Unity Lifetime quản lý & EF Data Context -> Thực hành tốt nhất

Đã có rất nhiều bài viết về quản lý Lifetime Unity nhưng tôi vẫn chưa tìm được người nêu một nguyên tắc nhỏ cho "trong những trường hợp bạn nên luôn sử dụng X ". Để tôi mô tả ứng dụng của mình, tôi có một ứng dụng web ASP.NET MVC 4. Tôi có một giải pháp Visual Studio có chứa 3 dự án, dự án 'Core' của tôi có tất cả các công cụ EF của tôi, một dự án thử nghiệm và Dự án MVC Web. Tôi đang sử dụng Unity cho dependency injection và đã đoạn mã sau ngay bây giờ:

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

Tuy nhiên, tôi nhận thấy rằng bối cảnh của tôi không được tái tạo lại với mọi yêu cầu web mới đó là những gì tôi nghĩ rằng tôi muốn (cho tôi biết nếu tôi sai trong giả định đó). Tôi đang có một thời gian khó phân tích tất cả các thông tin từ các trang web được liệt kê dưới đây và đã đọc về rất nhiều người tạo ra lớp riêng của họ có tên là PerHttpRequestLifetimeManager để xử lý việc này.

Thực tiễn tốt nhất ở đây là gì?

  1. Managers Lifetime Hiểu bởi Microsoft Developer Network - http://msdn.microsoft.com/en-us/library/ff660872(v=PandP.20).aspx
  2. MVC DI & Unity với Lifetime quản lý qua CodeProject - http://www.codeproject.com/Articles/424743/MVC-DI-Unity-with-Lifetime-Manager
  3. ASP.NET MVC Mẹo: Dependency Injection với Unity Application Block qua Blog Shiju Varghese của - http://weblogs.asp.net/shijuvarghese/archive/2008/10/24/asp-net-mvc-tip-dependency-injection-with-unity-application-block.aspx
  4. MVC, EF - Ví dụ đơn lẻ DataContext Per-Web-Yêu cầu trong Unity qua Stack Overflow - MVC, EF - DataContext singleton instance Per-Web-Request in Unity
  5. Tiêm cùng DataContex t thể hiện trên nhiều loại với Unity qua Stack Overflow - Inject same DataContext instance across several types with Unity
+0

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

Trả lời

6

Có, bạn thường muốn một DbContext theo yêu cầu.

Trình quản lý PerHttpRequestLifetime hoặc vùng chứa con được tạo trên mọi yêu cầu là những cách thông thường được xử lý.

Phiên bản mới nhất của Unity giới thiệu số Unity bootstrapper for ASP.NET MVC có trình quản lý toàn thời gian tích hợp mới: PerRequestLifetimeManager.

Bạn có thể đọc thêm trong số Developer's Guide to Dependency Injection Using Unity chương 3, Dependency Injection with Unity.

+2

Xin chào Randy! Một câu trả lời hơi cũ nhưng vấn đề của tôi thực sự liên quan đến điều này. Tôi đang sử dụng 'PerRequestLifetimeManager' để đăng ký ngữ cảnh của tôi trong Unity:' container.RegisterType (PerRequestLifetimeManager mới), mới InjectionConstructor()); '- nhưng DbContext không bao giờ được xử lý theo yêu cầu. Tôi cũng bao gồm dòng này trong phương thức 'RegisterTypes':' DynamicModuleUtility.RegisterModule (typeof (UnityPerRequestHttpModule)); 'nhưng khi tôi làm điều đó, DbContext được xử lý trước khi yêu cầu kết thúc. Bất kỳ ý tưởng? –

Các vấn đề liên quan