Tôi đang cố gắng triển khai một trình cắm như ứng dụng. Tôi biết đã có một số giải pháp ra khỏi đó nhưng đây chỉ là bằng chứng về khái niệm, không có gì hơn. Ý tưởng sẽ làm cho ứng dụng chính của ứng dụng hầu như không có gì đặc biệt theo mặc định và sau đó cho phép các plugin biết về nhau, khiến chúng có thể triển khai tất cả các tính năng cần thiết.Kiến trúc giống như plugin trong .NET
Một vài vấn đề nảy sinh:
- Tôi muốn các plugins trong thời gian chạy để biết về nhau thông qua ứng dụng của tôi. Điều đó không có nghĩa là ở thời gian code họ không thể tham khảo các assembly khác của plugin để họ có thể sử dụng các giao diện của nó, chỉ việc khởi tạo tính năng plugin phải luôn luôn thông qua ứng dụng chính của tôi. Ví dụ: nếu tôi có cả hai plugin X và Y được tải và Y muốn sử dụng các tính năng của X, bạn nên "đăng ký" sở thích của mình mặc dù ứng dụng của tôi sử dụng các tính năng của nó. Tôi phải có một loại "từ điển" trong ứng dụng của tôi, nơi tôi lưu trữ tất cả các plugin được tải. Sau khi đăng ký cho sự quan tâm trong ứng dụng của tôi, plugin Y sẽ nhận được một tham chiếu đến X để nó có thể sử dụng nó. Đây có phải là một cách tiếp cận tốt?
- Khi mã hóa plugin Y sử dụng X, tôi cần tham chiếu đến assembly X, vì vậy tôi có thể lập trình dựa trên giao diện của nó. Điều đó có vấn đề về phiên bản. Điều gì sẽ xảy ra nếu tôi mã Y plugin của mình dựa trên phiên bản X lỗi thời đã lỗi thời? Tôi có nên luôn luôn sử dụng một "trung tâm" nơi mà tất cả các hội đồng, có luôn luôn có phiên bản cập nhật của hội đồng?
Có cơ hội cho bất kỳ cuốn sách nào có liên quan cụ thể đến các loại thiết kế này cho .NET không?
Cảm ơn
chỉnh sửa: Tôi nghĩ mọi người đang trôi đi từ 2 câu hỏi tôi đưa ra. Tôi có thể xem cả MEF và #develop, nhưng tôi muốn nhận được câu trả lời cụ thể cho các câu hỏi tôi đã thực hiện.
Tôi khuyên bạn nên xem xét MEF, thương hiệu mới nhưng trông rất hứa hẹn. –
@Matt - nghĩ rằng bạn nên đặt câu trả lời này - đó là chính xác những gì tôi định nói –
Tôi đã nghe nói về MEF, nhưng như đã nêu trong OP, ý tưởng của tôi là không sử dụng một khung đã được xây dựng mà để thực hiện Bản thân mình. Nó không cần cái gì đó rất phức tạp. –