2011-01-20 14 views
8

Mam program, który opracowałem do korzystania z podstawowej architektury wtyczek. W efekcie, gdy program się ładuje, wykorzystuje odbicie do przeszukiwania katalogu dla bibliotek dll, które pasują do określonego interfejsu, a następnie ładuje je. Wygląda na to, że obecna lista wtyczek jest wszystkim, co będzie używane.C# DLL's wtyczki architektury

Dlatego moja obecna praktyka sprawdzania plików dll nadal najlepszą praktyką, czy istnieją lepsze sposoby ładowania każdej biblioteki DLL?

Dzięki.

+0

Czy możesz nieco wyjaśnić swoje pytanie za pomocą przykładowego kodu? Pytam o to, ponieważ już opracowałem bardzo podobną architekturę wtyczek, która skanowała bibliotekę dll w katalogu wtyczek. Jeśli widzimy twoje powiązane źródło, myślę, że możemy udzielić porady. – HuseyinUslu

+0

Czy masz na myśli "Dll, które pasują do określonego interfejsu", że zawsze ładujesz wszystkie zestawy wtyczek i bada KLASY przed interfejsem? Czy używasz ładowania reflectionOnly? Czy możesz być bardziej spcific na "bieżąca lista wtyczek jest wszystkim, co będzie używane". Czy masz na myśli to, że nie znalazłeś żadnych wtyczek nawet po pomyślnym załadowaniu zespołów? "Czy istnieją lepsze sposoby ładowania każdej biblioteki DLL". W porównaniu do tego, co dokładnie? Interesujący temat, ale nie może pomóc bez uzyskania dodatkowych informacji. –

+0

Naprawdę chciałbym poprosić kogoś o uprawnienia do zmiany tytułu! IMO w oparciu o to, co OP, co jest dość mylące. Zmieniłem to pytanie. – gideon

Odpowiedz

14

Z twojego pytania wynika, że ​​zbudowałeś (lub próbujesz zbudować) swoją własną architekturę wtyczek. To nie jest taki dobry pomysł, ponieważ .NET ma już to, czego szukasz.

. NET ma 2 sposoby na włączenie wtyczek.

  1. System.Addin
  2. MEF - Managed Extensibility Framework

(1) System.Addin - Mam ledwie słyszał/czytać dużo o nim. Ale można spojrzeć na kilka artykułów tutaj:
System.Addin article from MSDN magazine < - Uwaga Rok 2007
System.Addin tools and examples at Codeplex

(2) Teraz, MEF, MEF jest po prostu niesamowite! Jest to świetny i łatwy sposób na wprowadzenie architektury wtyczki do systemu. MEF jest również częścią Silverlight i Visual Studio 2010 używa go. Widzę, że chcesz dynamicznie ładować biblioteki DLL z wtyczkami, dzięki MEF możesz zaprojektować aplikację w taki sposób, aby klasy, które pakujesz w swoje oprogramowanie, mogły znajdować się we własnym zestawie (.exe), a następnie możesz użyć MEF do dynamicznego szukania biblioteki dll w przyszłości, które będą miały klasy, których potrzebujesz. Cała procedura sama w sobie jest bardzo prosta w 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

osobiście uważasz powinny iść z MEF, jego nowy, łatwy i nawet visual studio go używa, tak można spojrzeć pod adresem:
Choosing between MEF and MAF (System.AddIn)

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

6

Możesz użyć klasy FileSystemWatcher do monitorowania katalogu w poszukiwaniu zmian.

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; 
} 

Wtedy staje się plug and play sprawa :)

3

patrz MEF Jest to bardzo wydajne rozwiązanie do tworzenia projektów architektonicznych wtyczki.

1

To dobrze. Możesz także zdefiniować, które zestawy mają być załadowane do pliku konfiguracyjnego, jeśli uważasz, że posiadanie wielu bibliotek DLL we wspomnianym folderze może wpłynąć na twoją aplikację i może pojawić się problem z bezpieczeństwem, ponieważ każdy może wepchnąć bibliotekę DLL do tego folderu.

0
  • Od plugin myśli: „dawca wiedzieć dll załadować z góry” nie ma sposobu, aby na początku tys bind „unknown-dll” trzeba załadować i szukać realizacji interfejsu i użyć pewnego rodzaju z późne wiązanie.
  • "Przeszukiwanie biblioteki dll" zamiast "edycji pliku konfiguracyjnego" jest bardzo przyjazne dla użytkownika. w większości przypadków przeszukiwanie dll nie jest problemem z wydajnością, ponieważ jest wykonywane tylko raz podczas uruchamiania programu.

Myślę, że Twój projekt jest w porządku.

0

Dla twojego scenariusza polecam użycie MEF i jego DirectoryCatalog do załadowania wtyczek z określonego folderu. Jeśli dodatkowo skonfigurujesz śledzenie systemu plików i odświeżysz DirectoryCatalog podczas zmiany folderu, dzięki funkcji rekompozycji MEF będziesz mógł pobierać nowe wtyczki w środowisku wykonawczym! BTW, możesz zobaczyć nice recomposition sample I did for one of my MEF talks.

Powiązane problemy