Vấn đề:
Tôi đang xây dựng một khuôn khổ mà chấp nhận một tập tin, dịch nó và thực hiện nó. Khung này có thể xử lý bất kỳ loại tệp nào, cho đến cuối này, tôi đã cung cấp phương thức tải lên một DLL chứa các lớp và phương thức cho việc biên dịch dịch và thi hành một tệp. Những gì tôi đang tìm kiếm, là cách tốt nhất để xác định giao diện Pluginmẫu Plugin trong C#
Giải pháp A:
Xác định một tập hợp các giao diện đó là công bố rộng rãi. Plugin nên triển khai các giao diện này.
Giải pháp B:
Xác định một số lớp trừu tượng có sẵn công khai. Các trình cắm thêm cần phải thu thập và ghi đè các phương thức trừu tượng trên các lớp này.
Giải pháp C:rcravens
giao diện đèo quanh bên trong mã, tạo ra một lớp trừu tượng mà là công khai có sẵn để cho phép cắm mở rộng. Được chọn
Giải pháp này đã được chọn trước giao diện chỉ vì nó cho phép triển khai cơ bản (tiện dụng trong trường hợp này). Nó được chọn trước lớp trừu tượng chỉ vì nó cho phép nhạo báng trong mã. Các khung thành phần là tuyệt vời, nhưng một chút trên đầu cho một cái gì đó nhẹ như ứng dụng này, nơi chỉ có khả năng mở rộng hạn chế là mong muốn.
Giải pháp D:Jay và Chris Shain
Thực hiện một khuôn khổ tổng hợp (chẳng hạn như Managed Extensibility Framework(MEF)) và xây dựng xung quanh nó
Nếu bất kỳ giải pháp mới xuất hiện, tôi sẽ thêm chúng vào danh sách này. Câu trả lời sẽ được chuyển tới người có khả năng tốt nhất để biện minh cho giải pháp của họ (có thể có lợi thế và hạn chế)
Cảm ơn trước,
Tech thử nghiệm Dude
Điều gì về MEF và MAF? Tôi không biết ý bạn là gì khi bạn nói về bản dịch, nhưng MEF và MAF (có thể được làm giàu với một số thứ DI thông thường) được tạo ra để xây dựng các ứng dụng tổng hợp. Bạn có thể muốn đọc lướt qua mã Prism (Composite WPF), toàn bộ nội dung là về các ứng dụng tổng hợp hay còn gọi là modules/plugins. Nếu bạn đang nói về các ứng dụng web, nguồn gốc của CMS CMS cũng có thể thú vị. Những kẻ này đã xây dựng một cơ sở hạ tầng plugin tốt đẹp trên đầu trang của ASP.NET MVC. – Jay
Ứng dụng được đề cập là một dịch vụ web, đang ngồi trên máy chủ. Ý tưởng là nhiều người có thể cung cấp tệp cho 'dịch' và một số người có thể cung cấp plugin. Khi mọi người cung cấp tệp của họ, họ sẽ chọn plugin nào sẽ được sử dụng để 'dịch' chúng. Kết thúc giao diện người dùng thực tế (WPF, MVC, v.v.) không phải là vấn đề ngay bây giờ. Do đó, tôi đã tránh xa các khuôn khổ tiền giả mạo bởi vì chúng có xu hướng khá khó chịu. Sửa chữa cho tôi nếu tôi gặp lỗi –
Chưa làm việc với MAF và không biết liệu nó có được duy trì bởi MS hay không nhưng tôi nghĩ ít nhất MEF nên cung cấp cơ sở hạ tầng cần thiết. Nó không giới hạn trong các công cụ GUI. Mặc dù tôi nghĩ rằng @Chris Shain là đúng, không sáng tạo lại bánh xe. BTW: Có gì về an ninh? Tôi có nghĩa là ai đó có thể tải lên mã độc hại dưới dạng plugin. Có vẻ như một sandbox là bắt buộc. – Jay