Container-returtype i et interface, plugin-struktur
Hej, Jeg sidder med et projekt, med en plugin-struktur.
Jeg har et interface, PluginInterface indeholdende en metode som gerne skulle have en returtype af en form for container; List, Array, ArrayList e.l. .
ex: Array<String> getArray(); eller ArrayList getArrayList();
En DLL implementerer dette interface og anvender dens metode.
Endelig indlæser en Form DLL'en og implementerer samme interface.
*****
Men når jeg medtager metoden med en container som returtype i interfacet får jeg denne fejl; ReflectionTypeLoadException was unhandled.
Ved denne del af koden:
Type [] pluginTypes = Assembly.LoadFile(s).GetTypes();
*****
Hvordan kan jeg anvende metoder med en container som returtype fra interfacet?
Lade alle dine plugin klasser implementere et interface og eksportere dette:
[Export(typeof(IFoobar))] public class Something : IFoobar { // implementation af metoder i interface }
2)
Lave en klasse som skal have en ref til alle plugins:
public class PluginManager { [ImportMany] private List<IFoobar> plugins = null; ... // metoder som bruger plugins ... }
3)
Loade alle plugins af type IFoobar fra et eller flere directories:
PluginManager pm = new PluginManager(); AggregateCatalog cat = new AggregateCatalog(); cat.Catalogs.Add(new DirectoryCatalog(@"C:\Foobar")); CompositionContainer container = new CompositionContainer(cat); container.SatisfyImportsOnce(pm); // pm er klar til brug
Men hvor traditionel DI loader et bestemt antal plugins, saa er MEF designet til ogsaa at kunne scanne DLL's i flere dirs og loade alle dem som matcher.
Tror jeg bedre forstår MEF nu, scanning af dirs kan både Structuremap og Ninject gøre, men dog ikke Spring.NET
Anyway, kan denne forherligelse af MEF have noget at gøre med at projektet er startet af MS-folk som er mest "vant" til at bruge Unity som ikke understøtter dir-scanning?
Grundliggende er formaalet med DI og plugins forskellige.
Fremkomsten af MEF i .NET 4.0 skal nok snarere ses som et resultat af kritik af MAF som kom i .NET 3.5.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.