Phiên bản hiện tại của StructureMap có hỗ trợ ASP .Net Web API, MVC 4 và .NET Framework 4.5 không?StructureMap và ASP .Net Web API và .Net Framework 4.5
Trả lời
Như đã nêu here, API web sử dụng trình phân giải phụ thuộc.
class StructureMapDependencyResolver : IDependencyResolver
{
public IDependencyScope BeginScope()
{
return this;
}
public object GetService(Type serviceType)
{
return ObjectFactory.GetInstance(serviceType);
}
public IEnumerable<object> GetServices(Type serviceType)
{
return ObjectFactory.GetInstances(serviceType);
}
public void Dispose()
{
}
}
Và trong Global.asax.cs của bạn, bao gồm dòng này để đăng ký resolver phụ thuộc:
GlobalConfiguration.Configuration.DependencyResolver = new StructureMapDependencyResolver();
Bên cạnh đó, API Web mới là rất dễ dàng để sử dụng với container IoC.
Tôi chưa xem xét, nhưng tôi tin rằng phương pháp BeginScope
mà tôi để trống có thể được sử dụng với các vùng chứa con.
Edit:
Việc thực hiện trên các công trình lớn; trong thực tế, tôi thích nó hơn thay thế tôi sắp nói với bạn. Điều này sẽ giải quyết bất kỳ loại nào với khả năng tốt nhất của StructureMap và sẽ ném lỗi bất cứ khi nào xảy ra sự cố. Tôi thích nhìn thấy lỗi bởi vì họ chỉ cho tôi những gì tôi đã làm sai.
Tuy nhiên, API hy vọng rằng GetService
sẽ trả về giá trị rỗng nếu có sự cố. Vì vậy, để đảm bảo phù hợp với các API, đây là việc thực hiện đề nghị:
public object GetService(Type serviceType)
{
if (serviceType.IsAbstract || serviceType.IsInterface)
return ObjectFactory.TryGetInstance(serviceType);
else
return ObjectFactory.GetInstance(serviceType);
}
Sự khác biệt là TryGetInstance
chỉ tìm kiếm các loại được đăng ký trong container và sẽ trả về null nếu họ gặp khó khăn. serviceType.IsAbstract || serviceType.IsInterface
được coi là đủ tốt của một kiểm tra để quyết định phương pháp để sử dụng. Câu trả lời ban đầu của tôi đã được dự định đơn giản và đơn giản, nhưng @PHeiberg chỉ ra trong các ý kiến ở đây rằng nó không hoàn toàn "đúng". Bây giờ bạn có kiến thức, sử dụng bất cứ điều gì có vẻ tốt nhất.
Phiên bản phát hành API Web ASP.NET sử dụng trình phân giải phụ thuộc (triển khai giao diện IDependencyResolver) và cũng giới thiệu phạm vi khái niệm - phụ thuộc mới (triển khai giao diện IDependencyScope). Điều quan trọng là phải triển khai IDependencyScope đúng cách - nếu được triển khai đúng cách, nó cho phép phát hành tài nguyên (được tạo ra trong phạm vi) khi IDependencyScope được xử lý. Và nó được xử lý khi yêu cầu kết thúc.
IDependencyScope hoạt động tốt nhất khi vùng chứa hỗ trợ vùng chứa lồng nhau (hoặc con). StructureMap hiện nó từ phiên bản 2.6.1.
tôi đã viết một bài báo như thế nào để cấu hình StructureMap trong Web API: Configuring StructureMap in ASP.NET WebAPI
Bạn cũng có thể kiểm tra bài viết từ Mike Wasson: Using the Web API Dependency Resolver
- 1. ASP.NET Web API Framework 4.5 Lỗi IIS7
- 2. WCF vs ASP .Net Web API
- 3. IIS6 và .Net 4.5?
- 4. Là phần System.Web.Optimization của .Net Framework 4.5?
- 5. IIS 7.5 và ASP .NET 2.0
- 6. API Web ASP .NET của Microsoft, MVC 4 và Kiến trúc SPA
- 7. .NET compact framework và ActiveSync
- 8. Entity Framework 5.0 - phiên bản .NET Framework tối thiểu cần thiết? .Net 4.0 hoặc 4.5?
- 9. Cách cài đặt .NET 4.5?
- 10. Lớp ConfigurationManager không tồn tại trên .NET 4.5 Framework
- 11. .NET 4.5 RC Framework CLR - Tương thích với Windows XP
- 12. Compile .net vào xây dựng máy chủ với .net 4.5
- 13. .NET Framework 4.5 có hỗ trợ SSE4/AVX không?
- 14. .NET Framework yêu cầu hệ thống 4.5 hoạt động (không có Vista và XP)
- 15. có .Net 4.5 bao gồm .Net 4.0
- 16. API LINQ động với .NET Framework 4
- 17. Yêu cầu ASP.NET và .NET 4.5 - Hành vi lạ
- 18. Domain Driven Design, .NET và Entity Framework
- 19. ASP .Net WorldPay Integration
- 20. ASP .NET Singleton
- 21. .NET & ASP vs PHP
- 22. Tính năng MỚI nào có WCF trong .NET Framework 4 và .NET Framework 3.5?
- 23. Thiếu VS2012 RTM .net 4.5 và mvc mẫu dự án
- 24. SQLite với Visual Studio 2012 và .NET 4.5?
- 25. Nhiệm vụ và Chủ đề trong .NET 4.5
- 26. Di chuyển từ ASP Classic sang .NET và giảm đau
- 27. NSIS Installer với .NET 4.5
- 28. Tính năng Ribbon sử dụng .Net 4.5
- 29. ASP.net Web API và System.Net.Http
- 30. API NHibernate thông thạo và .NET 2.0
StructureMap không xử lý phụ thuộc độ phân giải như dự kiến ở đây. Hãy xem ví dụ này và các bình luận của Jeremy: http://ardalis.com/How-Do-I-Use-StructureMap-with-ASP.NET-MVC-3 – PHeiberg
Thực ra điều này sẽ hiệu quả. Jeremy nói 'TryGetInstance' chỉ giải quyết nếu' serviceType' được đăng ký một cách rõ ràng. 'GetInstance' vẫn sẽ giải quyết các loại không được đăng ký nhưng là cụ thể. – kelloti
Độ phân giải của các phiên bản sẽ hoạt động với mã của bạn. Tuy nhiên tôi giải thích liên kết tôi đã đăng là "Thực tiễn tốt nhất" được đề xuất, kể từ khi Jeremy tự đề xuất [http://codebetter.com/jeremymiller/2011/01/23/if-you-are-using-structuremap-with -mvc3-please-read-this /). Tôi đoán rằng phương pháp GetService là nghĩa vụ phải trả về null, thay vì tạo ra một ngoại lệ nếu loại không thể phân giải bằng container. – PHeiberg