2011-01-20 26 views
8

Temel bir eklenti mimarisini kullanmak için geliştirdiğim bir programım var. Etkili bir şekilde, program yüklendiğinde, dll için belirli bir arabirime uyan dizini aramak için yansıma kullanır ve sonra bunları yükler. Şimdi, mevcut eklenti listesinin kullanılacağı görülüyor.C# DLL eklentisi mimarisi

Bu nedenle, şu andaki uygulamalarımız dll dosyalarını hala en iyi uygulama olarak kontrol ediyor mu yoksa her bir dll'yi yüklemek için daha iyi yollar var mı?

Teşekkürler.

+0

Sorunuzu örnek kodunuzla biraz netleştirebilir misiniz? Bunu soruyorum çünkü zaten bir eklenti dizinindeki dll'yi tarayan çok benzer bir eklenti mimarisi geliştirmiştim. İlgili kaynağınızı görebilirsek, tavsiyede bulunabiliriz. – HuseyinUslu

+0

Demek ki "dll'ler belirli bir arayüze uyan" dır? Her zaman eklenti derlemelerini yükler ve CLASSES'i arayüze karşı mı incelersiniz? Yansıma kullanıyor musunuz? "Geçerli eklenti listesi kullanılacak olanların tümü" konusunda daha spesifik olabilir misiniz? Montajlar başarıyla yüklendikten sonra bile eklenti bulamadığınız anlamına mı geliyor? "Her dll'yi yüklemek için daha iyi yollar var". Tam olarak ne ile karşılaştırıldığında? İlginç bir konu ama daha fazla bilgi almadan yardımcı olamaz. –

+0

Başlığı değiştirmek için güçleri olan birisini istemeyi çok isterim! IMO, OP'in ne olduğunu yanlış yönlendiriyor. Soruyu yeniden etiketledim. – gideon

cevap

14

Sorunuzdan, kendi eklenti mimarinizi oluşturduğunuz (veya oluşturmaya çalıştığınız) gibi görünüyor. NET'ten beri aradığınız şeyi zaten bu kadar iyi bir fikir değil.

.NET, eklentilere izin vermenin 2 yolunu sunar.

  1. System.Addin
  2. MEF - Zar zor/duydum bu konuda çok okunan -

(1) System.Addin Genişletilebilirlik Framework Yönetilen. Ama burada birkaç makaleleri inceleyin alabilir:
System.Addin article from MSDN magazine < - Not Yıl 2007
System.Addin tools and examples at Codeplex

(2) Şimdi MEF MEF sadece harika! Eklenti mimarisini sisteminize tanıtmanın harika ve kolay bir yolu. MEF ayrıca Silverlight'ın bir parçasıdır ve Visual Studio 2010 bunu kullanır. Dinamik olarak eklentileri olan dll'leri yüklemek istediğinizi görebiliyorum, MEF ile uygulamanızı yazılım ile paketlediğiniz sınıflar kendi derlemenizde (.exe) olacak şekilde tasarlayabilir ve daha sonra MEF'yi dinamik olarak aramak için kullanabilirsiniz. Gelecekte ihtiyaç duyacağınız dersler olacak. Tüm prosedürün kendisi MEF'de çok basittir.MEF is Open Source on Codeplex

Mike Taulty has a brilliant video series on MEF

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

Şahsen bir göz atabilirsiniz öyle olsa bile, yeni, kolay ve hatta görsel stüdyo kullanır MEF ile gitmeliyiz at:
Choosing between MEF and MAF (System.AddIn)

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

6

Değişiklikler için bir dizini izlemek üzere FileSystemWatcher sınıfını kullanabilirsiniz.

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

Sonra bir tak ve çalıştır mesele :)

3

O Eklenti tasarımlar yaratmak için çok güçlü bir mimari çözüm MEF bakın olur.

1

Bu iyi. Alternatif olarak, söz konusu klasörde çok sayıda DLL dosyasının uygulamanızı etkileyebileceğini düşünüyorsanız ve herhangi bir kişi bir DLL dosyasını bu klasöre gönderebileceğinden bazı güvenlik sorunları olabileceğini düşünüyorsanız, yapılandırma dosyasında hangi derlemelerin yükleneceğini de tanımlayabilirsiniz.

0
  • ortalama eklentisi beri: "Önceden yüklemek için dll bağışta bulunan kimse bilmek" "bilinmeyen-dll" yüklemek ve arayüz uygulaması için arama ve bir tür kullanmak zorunda erken bağlama ths yolu yoktur 'un geç bağlantısı.
  • "Yapılandırma dosyasını düzenleme" yerine "dll aranıyor" çok kullanıcı dostudur. Çoğu durumda dll araması, program başlangıcında sadece bir kez yapıldığı için bir performans sorunu değildir.

Sanırım tasarımınız tamam.

0

Sizin senaryo için belirli bir klasörden eklentileri yüklemek için MEF ve onun DirectoryCatalog'u kullanmanızı öneririz. Dosya sistemi izleyicisini ek olarak yapılandırırsanız ve klasör değişikliklerinde DirectoryCatalog'u yenilediyseniz, MEF'in yeniden düzenleme özelliği sayesinde çalışma zamanında yeni eklentileri çekebilirsiniz! BTW, bir nice recomposition sample I did for one of my MEF talks görebilirsiniz.