2011-01-20 7 views
8

Tôi có một chương trình mà tôi đã phát triển để sử dụng kiến ​​trúc plugin cơ bản. Có hiệu quả, khi chương trình tải nó sử dụng sự phản ánh để tìm kiếm thư mục cho dll của phù hợp với một giao diện nhất định và sau đó tải chúng. Nó bây giờ xuất hiện rằng danh sách các plugin hiện tại là tất cả những gì sẽ được sử dụng.Cấu trúc plugin của C# DLL

Vì vậy, thực tiễn hiện tại của tôi là kiểm tra các tệp dll vẫn là phương pháp hay nhất hay có cách nào tốt hơn để tải từng dll?

Cảm ơn.

+0

bạn có thể làm rõ một chút câu hỏi của mình với mã mẫu không? Tôi đang yêu cầu điều này bởi vì tôi đã phát triển một kiến ​​trúc plugin rất giống nhau đã quét dll trong một thư mục plugin. Nếu chúng ta có thể thấy nguồn liên quan của bạn, tôi nghĩ chúng tôi có thể đưa ra lời khuyên. – HuseyinUslu

+0

Bạn có nghĩa là Bởi "dll của phù hợp với một giao diện nhất định" mà bạn luôn luôn tải tất cả các hội đồng plugin và kiểm tra CLASSES chống lại giao diện? Bạn có sử dụng reflectionOnly đang tải không? Bạn có thể trở nên spcific hơn về "danh sách plugin hiện tại là tất cả những gì sẽ được sử dụng". Bạn có nghĩa là bạn không tìm thấy bất kỳ plugin nào ngay cả sau khi hội đồng được nạp thành công? "có cách nào tốt hơn để tải từng dll" không. So với chính xác thì sao? Chủ đề thú vị nhưng không thể giúp đỡ nếu không có thêm thông tin. –

+0

Tôi thực sự muốn yêu cầu một người có quyền hạn thay đổi tiêu đề! IMO dựa trên những gì OP những gì nó khá gây hiểu nhầm. Tôi đã lắp lại câu hỏi. – gideon

Trả lời

14

Từ câu hỏi của bạn có vẻ như bạn đã xây dựng (hoặc đang cố gắng xây dựng) loại kiến ​​trúc plugin của riêng bạn. Nó không phải là một ý tưởng tốt kể từ khi NET đã có những gì bạn đang tìm kiếm.

.NET đi kèm với 2 cách để cho phép plugin.

  1. System.Addin
  2. MEF - Managed Khả năng mở rộng khung

(1) System.Addin - Tôi đã hầu như không nghe/đọc nhiều về nó. Nhưng bạn có thể có một cái nhìn tại một vài bài viết ở đây:
System.Addin article from MSDN magazine < - Lưu ý năm 2007
System.Addin tools and examples at Codeplex

(2) Bây giờ, MEF, MEF chỉ là tuyệt vời! Một cách tuyệt vời và dễ dàng để giới thiệu kiến ​​trúc plugin vào hệ thống của bạn. MEF cũng là một phần của Silverlight và Visual Studio 2010 sử dụng nó. Tôi có thể thấy bạn muốn tải dll với plugin tự động, với MEF bạn có thể thiết kế ứng dụng của bạn theo cách mà các lớp bạn đóng gói với phần mềm của bạn có thể nằm trong assembly của bạn (.exe) và sau đó bạn có thể sử dụng MEF để tìm kiếm động dlls trong tương lai sẽ có các lớp học mà bạn cần. Toàn bộ quy trình tự nó rất đơn giản trong MEF.

Mike Taulty has a brilliant video series on MEF

MEF Article at Codeproject - Part 1 MEF Article at Codeproject - Part 2

MEF is Open Source on Codeplex

Cá nhân tôi nghĩ rằng bạn nên đi với MEF, mới, dễ dàng và thậm chí visual studio của mình sử dụng nó, ngay cả như vậy bạn có thể có một cái nhìn tại:
Choosing between MEF and MAF (System.AddIn)

Do check out other top voted questions on the mef tag at SO

6

Bạn có thể sử dụng lớp FileSystemWatcher để giám sát một thư mục để thay đổi.

publicvoid CreateWatcher() 
{ 
//Create a new FileSystemWatcher. 
FileSystemWatcher watcher = newFileSystemWatcher(); 

//Set the filter to only catch DLL files. 
watcher.Filter = "*.dll"; 

//Subscribe to the Created event. 
watcher.Created += new 
FileSystemEventHandler(watcher_FileCreated); 

//Set the path to C:\Temp\ 
watcher.Path = @"C:\Temp\"; 

//Enable the FileSystemWatcher events. 
watcher.EnableRaisingEvents = true; 
} 

Sau đó, nó trở thành một plug and play chuyện :)

3

tham khảo MEF Đó là một giải pháp kiến ​​trúc rất mạnh mẽ để tạo thiết kế Plugin.

1

Điều này là tốt. Ngoài ra, bạn có thể định nghĩa các assembly nào sẽ được nạp trong file config, nếu bạn cảm thấy rằng có nhiều DLL trong thư mục nói trên có thể ảnh hưởng đến ứng dụng của bạn và có thể có một số vấn đề bảo mật vì ai cũng có thể đẩy một DLL vào thư mục đó.

0
  • Kể từ khi cắm có nghĩa là: "bạn donot biết dll để nạp trước" không có cách nào để ths ràng buộc đầu "không rõ-dll" bạn phải tải và tìm kiếm thực hiện giao diện và sử dụng một loại của liên kết trễ.
  • "Tìm kiếm dll" thay vì "chỉnh sửa tệp cấu hình" rất thân thiện với người dùng. trong hầu hết các trường hợp tìm kiếm dll không phải là một vấn đề hiệu suất kể từ khi nó được thực hiện chỉ một lần khi bắt đầu chương trình.

Tôi nghĩ rằng thiết kế của bạn là ok.

0

Đối với kịch bản của bạn, tôi khuyên bạn nên sử dụng MEF và DirectoryCatalog để tải các plugin từ một thư mục cụ thể. Nếu bạn bổ sung cấu hình trình theo dõi hệ thống tệp và làm mới DirectoryCatalog trên thư mục thay đổi, nhờ tính năng phân phối của MEF, bạn sẽ có thể kéo các plugin mới trong thời gian chạy! BTW, bạn có thể thấy nice recomposition sample I did for one of my MEF talks.