2009-03-28 21 views
11

Tôi đang bắt đầu một ứng dụng Winforms mới và tôi định sử dụng một khung công tác IoC/DI (có thể là Ninject, nhưng tôi cũng đang nghĩ về StructureMap và LinFu).Các khuôn khổ IoC/DI với ứng dụng Smart Client Winform: Tôi nên tiếp cận điều này như thế nào?

Dường như gần như tất cả mọi người đang sử dụng IoC/DI đều làm như vậy trong môi trường dựa trên web và hầu như không tìm thấy gì bằng cách sử dụng Winforms với nó.

Tôi muốn biết liệu có ai đang sử dụng IoC/DI với Winforms và cách tiếp cận bạn sử dụng để xử lý các vấn đề liên quan đến Winforms hay không (ví dụ: cách bạn làm cho vùng chứa có sẵn ở các phần khác nhau của ứng dụng) sử dụng khung để khởi tạo biểu mẫu của bạn, v.v ..)

Nếu có ai biết về bất kỳ dự án dựa trên Winforms nguồn mở nào sử dụng IoC/DI (không quan trọng khung nào, tôi có thể dịch khái niệm) tôi muốn liên kết đến những người là tốt.

CHỈNH SỬA:

Mọi người không chỉ viết Ứng dụng khách thông minh nữa?

EDIT:

Nếu bạn có thể chỉ cho tôi một số mã thực tế có sử dụng IoC/DI trong một Winforms hoặc thậm chí an ủi ứng dụng loại (tức là, cái gì mà không dựa trên web) Tôi đánh giá cao nó.

EDIT:

Tôi đã sử dụng Ninject và phát hiện ra rằng Ninject sẽ hạnh phúc tiêm một thể hiện của nó là giao diện hạt nhân phổ biến nếu bạn chỉ định một tham số constructor IKernel. Điều này đã được thực hiện khá tốt, nhưng tôi vẫn muốn nghe những cách tiếp cận khác mà mọi người sử dụng.

+0

jikes Tôi có rất nhiều điều cần tìm hiểu về .net. Tôi thậm chí không hiểu câu hỏi. – Nifle

+0

Thực ra, các khái niệm này đã được phổ biến rộng rãi trong Java. Và nó không liên quan đến .NET, tôi chỉ sử dụng các kỹ thuật này trong .NET –

+0

Bạn có tìm thấy bất kỳ phương pháp hay nhất nào về cách làm cho vùng chứa có thể truy cập thông qua ứng dụng không? Hoặc là những gì EDIT cuối cùng là về? Nó có nghĩa là tôi chỉ có thể cung cấp cho các lớp học cần nó một tham số 'IKernel' và Ninject hiện phần còn lại (ngay cả khi trong một tiểu dự án)? – InvisiblePanda

Trả lời

5

Tôi vừa mới bắt đầu viết một ứng dụng WinForms mới từ đầu bằng cách sử dụng StructureMap cho IoC. Trước đây tôi đã xem xét SCSF và CAB, nhưng phát hiện ra chúng quá phức tạp.

Tôi đã viết một số API thông thạo trên đầu trang của StructureMaps registry để các mô-đun của chúng tôi có thể đăng ký các lệnh, trình bày và chế độ xem.

Từ kinh nghiệm của tôi nó đã được giá trị nỗ lực trong tất cả các liên quan, tôi sẽ không bao giờ muốn viết một ứng dụng WinForms mà không sử dụng các công cụ này và phương pháp tiếp cận mô-đun có cấu trúc cao một lần nữa.

+0

Bạn có thể cung cấp một số ví dụ về nơi bạn thấy IoC/DI là một chiến thắng không? Tôi chỉ đi vào điều này, vì vậy tôi không hoàn toàn hiểu những gì bạn có ý nghĩa. –

+0

Ok, ứng dụng của chúng tôi đang sử dụng giao diện IoC, MVP, DDD, TDD và thông thạo ở mọi nơi. Mặc dù nó đã trở thành một con thú khá phức tạp nhưng tôi rất tự tin về chất lượng của nó. Sử dụng IoC, chúng tôi có thể rút ra từng phần của ứng dụng và kiểm tra nó trong sự cô lập. Chúng tôi đã thiết lập TeamCity để chạy thử nghiệm trên mọi cam kết. – grover

+0

Sử dụng IoC, chúng tôi có thể phản ứng dễ dàng với nhu cầu của khách hàng, bằng cách chuyển đổi các triển khai dịch vụ. Một ví dụ: Chúng tôi đã chuyển các kho DDD theo yêu cầu, chúng tôi đã thay đổi hành vi giao diện người dùng bằng cách chuyển đổi người thuyết trình. Không còn 'nếu ứng dụng ở chế độ x thì làm y z' crap. Thậm chí, hành vi giao diện người dùng khác cũng có thể giúp bạn. – grover

6

Nhóm thực hành và mô hình của Microsoft duy trì hộp chứa Unity cũng đã tạo ra Smart Client - Composite UI Application Block cho biểu mẫu thắng mà tôi tin là sử dụng Unity. Tôi biết phiên bản WPF mới được gọi là Composite Client Application Guidance (codename Prism) sử dụng Unity

+0

Tôi không thực sự thấy bất cứ điều gì về Unity ở đó ... tôi sẽ đào sâu hơn một chút, nhưng tôi nghĩ CUIAB có trước Unity. –

1

Tôi đã viết một ứng dụng để hiển thị bản đồ từ dữ liệu vectơ OpenStreetMap (http://wiki.openstreetmap.org/index.php/Kosmos). Tôi đã phát triển khung MVP đơn giản của riêng tôi sử dụng Lâu đài Windsor như một thùng chứa IoC. Bạn có thể tải xuống mã nguồn nếu bạn quan tâm, hiện tại mã này được cấp phép BSD.

Hiện tại tôi đang (từ từ) làm việc trên thiết kế lại khung này để có thể tạo biểu mẫu động (thay vì sử dụng trình thiết kế trực quan). Tôi đang đùa giỡn với ý tưởng giới thiệu một số loại giao diện thông thạo để xây dựng các biểu mẫu và điều khiển, nhưng tôi chưa đưa ra một giải pháp thanh lịch cho việc này.

0

Nếu bạn chỉ muốn có vùng chứa Inversion of Control và muốn có mức thấp hơn Unity một chút, hãy xem ObjectBuilder từ nhóm Mẫu và Thực tiễn của Microsoft. Unity là một lớp trừu tượng trên đầu trang của ObjectBuilder.

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