2010-06-01 22 views
6

Tôi đã tìm kiếm các phương thức cung cấp hỗ trợ trình cắm thêm khác nhau cho ứng dụng của mình. Lý tưởng nhất, tôi sẽ tạo ra một chức năng cốt lõi và dựa trên các khách hàng khác nhau phát triển các plug-in/addons khác nhau như nhập, xuất dữ liệu, vv ... Một số phương pháp nào có thể làm cho ứng dụng C# có thể mở rộng thông qua kiến ​​trúc plug-in?Cách phát triển chức năng dựa trên trình cắm thêm động trong C#

Cho phép tạo một ví dụ. Nếu chúng ta có một chương trình bao gồm một menu chính (File, Edit, View, et al.) Cùng với một TreeView hiển thị các nhãn hiệu xe hơi khác nhau do nhà sản xuất nhóm (Ford, GM, hiện tại). Nhấp chuột phải vào ô tô sẽ hiển thị menu ngữ cảnh với tùy chọn duy nhất là 'xóa xe'.

Làm thế nào bạn có thể phát triển ứng dụng để có thể triển khai trình cắm để bạn có thể cho phép một khách hàng thấy một thương hiệu mới trong TreeView, nói Honda và trình đơn ngữ cảnh ô tô để họ có thể 'vẽ một chiếc xe'?

Trong phát triển Eclipse/RCP, điều này dễ dàng được xử lý bởi các điểm mở rộng và các trình cắm thêm. C# xử lý nó như thế nào? Tôi đã xem xét việc phát triển kiến ​​trúc trình cắm thêm của riêng mình và đọc trên MEF.

Trả lời

10

MEF sẽ là một nơi tốt để bắt đầu.

Bài viết của Glenn Block Managed Extensibility Framework: Building Composable Apps in .NET 4 with the Managed Extensibility Framework cung cấp tổng quan tốt.

BTW, đừng bị đánh lừa bởi tiêu đề - bạn cũng có thể nhận MEF cho .NET 3.5 SP1.

+0

Tôi đã xem một số video MEF cho thấy việc sử dụng các bản tải, catelog và container. Tuy nhiên tôi chưa hiểu đầy đủ cách MEF cho phép bạn triển khai một plugin chỉnh sửa menu chính hoặc menu ngữ cảnh cho kiểm soát. Tôi đoán tôi đang bỏ lỡ bước nhảy cuối cùng từ những gì video miêu tả và cho phép ứng dụng của tôi phản hồi lại các phần quà của các plugin i, e. thêm một nút menu mới vào menu chính chẳng hạn. – Matthew

+0

Điều đó sẽ trở nên dễ dàng hơn để tìm ra nếu bạn sử dụng MVVM (http://msdn.microsoft.com/en-us/magazine/dd419663.aspx). Điều này sẽ cho phép bạn liên kết Menus và MenuItems với mô hình đối tượng cơ bản (có thể cắm). –

1

Visual Studio 2010 sử dụng MEF, vì vậy tôi nghĩ rằng đây là cách đặt cược an toàn, đây là cách ưu tiên để sử dụng MS. System.Addin luôn luôn có vẻ hơi nặng, nhưng nó có thể là một lựa chọn tốt hơn nếu bạn cần addins để luôn hoạt động và codebase của bạn không ngừng phát triển.

Nếu bạn quan tâm đến việc cô lập addins, bạn nên đọc trên AppDomains. Tôi đã có một dự án demo mà tôi đã thực hiện để giúp tìm hiểu làm thế nào để đối phó với isolating assemblies within an AppDomain here, mà bạn có thể thấy thú vị. Thông tin nhanh về cách ly: Chỉ các loại của bạn mới có thể vượt qua ranh giới và các loại này phải được niêm phong, chạy la hét từ xử lý sự kiện tên miền chéo và addins KHÔNG BAO GIỜ nên mở rộng MarshallByRefObject.

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