2008-10-30 27 views
6

Rất hiếm khi tôi nghe ai đó sử dụng nguyên tắc Inversion of Control (Ioc) với .Net. Tôi có một số người bạn làm việc với Java sử dụng nhiều IOC hơn với Spring và PicoContainer.Đảo ngược điều khiển với .net

Tôi hiểu nguyên tắc xóa phụ thuộc khỏi mã của bạn ... nhưng tôi nghi ngờ rằng nó tốt hơn rất nhiều.

Tại sao các lập trình viên Net không sử dụng (hoặc sử dụng ít hơn) các loại khung công tác đó? Nếu bạn làm, bạn có thực sự tìm thấy một hiệu ứng tích cực trong dài hạn?

+0

Chỉ cần Google "Alt.net" - bạn sẽ tìm thấy nhiều người sử dụng IOC trong .net. Microsoft thậm chí còn có các khuôn khổ IOC riêng của họ, chẳng hạn như Unity. –

Trả lời

6

Rất nhiều người sử dụng IOC trong .NET và có một số khung công tác có sẵn để hỗ trợ sử dụng IoC. Bạn có thể thấy nó ít hơn ở phía WinForms của mọi thứ, bởi vì nó khó khăn hơn để cho các container dây tất cả mọi thứ với nhau khi bạn đang thiết kế các hình thức trong Visual Studio, nhưng tôi có thể nói rằng đối với các ứng dụng .NET phía máy chủ, nơi tôi làm việc ít nhất , IoC được sử dụng rất thành công.

Tại sao lại sử dụng nó trong .NET? Vì lý do tương tự, bạn sử dụng nó ở mọi nơi khác. Hai điều lớn nhất tôi thích là:

  • Thiết kế cho IoC có xu hướng thực thi thực hành mã hóa tốt - thiết kế giao diện, ghép thấp, kết dính cao. Điều này cũng dẫn đến các lớp học rất dễ dàng để kiểm tra đơn vị.
  • Cấu hình hệ thống thường có thể được thay đổi mà không cần biên dịch lại.

Một số bài viết khác thảo luận về khuôn khổ IoC/DI khác nhau có sẵn cho NET:

4

tôi sử dụng StructureMap cho dependency injection và chỉ thời gian gần đây đã bắt đầu sử dụng nó với iBATIS.NET để chèn người lập bản đồ đối tượng miền của chúng tôi vào thời gian chạy (và không phải t hrough một tập tin cấu hình XML, không, cảm ơn!).

Tôi đã thấy các lợi ích tức thì. Tạo giao diện cho tất cả những người lập bản đồ của chúng tôi (chẳng hạn như IPersonMapper) và sau đó thêm Moq cho phép tôi viết một số bài kiểm tra đơn vị không có cơ sở dữ liệu tuyệt vời một cách nhanh chóng và dễ dàng.

Trước đây (.NET 1.0) Tôi đã viết hệ thống plugin của riêng mình chủ yếu để tìm hiểu về phản chiếu. Kể từ đó tôi đã thực hiện một số loại IoC trong các dự án của mình. Chỉ gần đây tôi mới bắt đầu sử dụng IoC để thực hiện các bài kiểm tra đơn vị ít gây đau đớn hơn nhiều khi viết. Tôi không thể tưởng tượng làm theo cách nào khác vào thời điểm này.

2

IoC không thực sự phổ biến trong .Net cho đến bây giờ. Và nó có tất cả mọi thứ để làm với Microsoft và có các chiến dịch quảng cáo mà họ đã làm. cho đến bây giờ họ đã nhấn mạnh hơn các khả năng RAD của VS và trong khi đó quên để thúc đẩy những thứ như IoC và Di nhưng bây giờ họ có khuôn khổ riêng của họ được gọi là Unity và với công việc họ đã làm trên ASP.Net MVC.

Vì vậy, tôi đoán phần lớn mọi người sẽ bắt đầu sử dụng những thứ như thế. Bởi vì biết rằng họ có một MS thay thế để sử dụng.

Và tôi sử dụng StructureMap.

1

Nó trở nên phổ biến hơn.Dự án hiện tại của tôi sử dụng Spring, và trong dự án trước của tôi, chúng tôi đã sử dụng Castle Windsor.

Bây giờ tôi muốn sử dụng ý tưởng 'quy ước qua cấu hình', để ngăn chặn tất cả các khai báo XML phức tạp đó.

1

Có rất nhiều lý thuyết liên quan đến việc sử dụng IoC .NET. Tôi nghĩ rằng có một số lượng công bằng của các nhà phát triển không có kinh nghiệm trong khu vực. Họ không đến từ một nền Java. Họ đến từ một ASP cổ điển, và một nền VB6. Ngoài ra, Microsoft đã không thực sự thúc đẩy việc sử dụng IoC cho đến gần đây.

Hơn nữa, việc sử dụng IoC giả định một số điều. Trước tiên, bạn phải hiểu những gì nó được sử dụng cho và những gì bạn đang nhận được ra khỏi nó. Thứ hai, bạn phải phát triển mã của bạn để một container IoC thực sự có thể được sử dụng.

IoC không chỉ là sử dụng một mục khác trong hộp công cụ. Đó là về việc biết cách sử dụng, biết khi nào nên sử dụng nó và trưởng thành với tư cách là một nhà phát triển.

Vì nó liên quan đến .NET, tôi có một số vùng chứa IoC. Tôi đã sử dụng Windsor, StructureMap, Unity và, gần đây nhất, Ninject. Tuy nhiên, hãy nhớ rằng tôi đã không sử dụng tất cả chúng trong các ứng dụng thực tế. Tôi thích chơi xung quanh và xem những gì đang xảy ra trên mạng. Tôi đã tìm thấy rằng thị trường cho container IoC .NET là khá tốt.

0

Tôi sử dụng nó để cho phép các bài kiểm tra Đơn vị của tôi thay thế các lớp Mock (mô phỏng các lớp sản xuất thực tế) cho các đối tượng phụ thuộc phía thượng lưu.

0

Hãy thử LinFu.IOC 2.0:

http://www.codeproject.com/KB/cs/LinFu_IOC.aspx

Đó là một trong các container IOC linh hoạt nhất trên mạng, và như Ninject, không có tập tin XML để duy trì. Tuy nhiên, không giống như Ninject, LinFu không ép buộc bạn viết bất kỳ mã ràng buộc nào để kết nối các phụ thuộc của bạn với nhau. Hãy xem! :)