7

Tôi đã làm việc với cả hai loại vùng chứa giữa IWindsorContainerIUnityContainer trong dự án khác nhau cho dịch vụ và Giao diện ràng buộc. Tuy nhiên tôi không khá chắc chắn sự khác biệt là gì? Họ có các tính năng giống nhau không? Nếu có thì cần phải phát triển một cái gì khác trong trường hợp hiện tại. Hay họ có một số khác biệt? Nếu có, nó là cái gì? mục đích nào tôi sẽ sử dụng cái nào? Tôi đã có một số nhỏ documentation chống lại sự nhầm lẫn này, nhưng tôi đã không im lặng nắm bắt nó. Vì vậy, nếu bạn cho tôi biết nó thì tôi sẽ biết ơn. Đề cập đến điều đó, tôi đang sử dụng NHibernet ánh xạ tại đây.Sự khác biệt giữa IWindsorContainer vs IUnityContainer là gì?

+0

Bản sao có thể có của [Container phun phụ thuộc? Nó làm gì?] (Http://stackoverflow.com/questions/8015101/dependency-injection-container-what-does-it-do) – NightOwl888

+0

Kính gửi @ NightOwl888, tôi muốn biết sự khác biệt, và tôi sẽ sử dụng trong tình huống nào. Tôi nghĩ bạn không hiểu những gì tôi đã hỏi. Trên câu trả lời trùng lặp bạn cung cấp ở đó họ đã thảo luận chỉ 'tài liệu Windsor' không có gì khác về 'IUnityContainer' Tôi cũng tìm kiếm điều này. –

+4

Bạn có thể sử dụng bất kỳ vùng chứa DI nào bạn muốn (hoặc không có vùng chứa DI nào cả) để triển khai mẫu Chèn phụ thuộc. Nhưng có thể sẽ là một sai lầm khi sử dụng nhiều hơn một ứng dụng trong cùng một ứng dụng. Để tìm hiểu về Dependency Injection, tôi đề nghị bạn đọc [Dependency Injection in .NET] (https://www.manning.com/books/dependency-injection-in-dot-net). Đây là một chủ đề quá rộng để được thảo luận theo một định dạng Q & A đơn giản. – NightOwl888

Trả lời

3

Tôi đã sử dụng cả hai thùng chứa và sự khác biệt lớn giữa chúng, qua nhiều năm sử dụng từng loại đã được UnityContainer được quản lý bởi một nhóm và vẫn đang được mở rộng. Các container Windsor không phải là rất lớn tại trở về lỗi thực sự. UnityContainer có tài liệu tuyệt vời và rất đơn giản để cài đặt bằng cách sử dụng nuget hoặc một số trình quản lý kho khác.

Đây là ý của tôi ... nếu bạn xem xét cách sử dụng mã của chúng, https://github.com/castleproject/Windsor/blob/master/docs/README.md, ví dụ như windsor rất bị làm mờ.

public void Install(IWindsorContainer container, IConfigurationStore store) 
    { 
     container.Register(Classes.FromThisAssembly() 
          .Where(Component.IsInSameNamespaceAs<King>()) 
          .WithService.DefaultInterfaces() 
          .LifestyleTransient()); 
    } 

Nếu bạn xem xét sự thống nhất, https://github.com/unitycontainer/unity/blob/master/quickstarts/CS/EventBroker/Src/Stoplight/Program.cs, sẽ trở nên rõ ràng hơn những gì đang xảy ra bằng cách đăng ký theo cách khác. Các mã lỗi khi bạn đang xuống hố thỏ cũng sạch hơn nhiều với Unity.

IUnityContainer container = new UnityContainer() 

      .AddNewExtension<SimpleEventBrokerExtension>() 

      .RegisterType<ILogger, TraceLogger>() 

      .RegisterType<IStoplightTimer, RealTimeTimer>(); 
Các vấn đề liên quan