Wenn Refresh () in einem DirectoryCatalog aufgerufen wird, wird ChangeRecurdedException ausgelöst, wenn neue DLLs im Verzeichnis gefunden werden

8

Ich experimentiere mit MEF und erstelle ein Testprogramm, um "plugins" aufzurufen, die eine bestimmte Schnittstelle implementieren, die folgt:

%Vor%

Ich habe ein Beispielkonsolenprogramm erstellt, das die "plugins" von seiner eigenen Assembly und, falls vorhanden, von einem Verzeichnis lädt, in das man zusätzliche DLLs einfügt. Das Programm funktioniert OK, wenn das Plugins-Verzeichnis leer ist (nur die "nativen" Plugins werden aufgerufen) oder es hat kompatible DLLs zum Starten. ABER ... wenn eine neue DLL zwischen Schleifeniterationen hinzugefügt wird, löst die Refresh () -Methode von DirectoryCatalog eine ChangeReplictedException aus, die so erklärt wird:

  

Die Zusammensetzung bleibt unverändert. Das   Änderungen wurden abgelehnt wegen der   Folgefehler: Die Zusammensetzung   produziert einen einzigen Kompositionsfehler.   Die Ursache ist unten angegeben.   Überprüfen Sie die CompositionException.Errors   Eigenschaft für detailliertere   Informationen.

     

1) Änderung der Exporte verhindert durch   nicht wiedervereinbarer Import   'MEFTest.Program.ProberSet   (ContractName="ProbeContract.IProbe")   auf Teil 'MEFTest.Program'.

Das Programm ist unten, folgen Sie dem Code für die DLL, die ich hinzufügen möchte. Was mache ich falsch?

%Vor%

Das Plugin. Die anderen beiden Plugins sind ähnlich, mit dem einzigen Unterschied, dass sie sich in derselben Assembly wie das Hauptprogramm befinden:

%Vor%     
JCCyC 15.07.2009, 19:24
quelle

1 Antwort

13

Ich nehme an, dass Sie die MEF-Vorschau 6 verwenden, weil Sie Ablehnungsausnahmen sehen. Der Grund für die Ablehnung der Änderung liegt darin, dass Ihr ProberSet nicht neu kompilierbar ist. Versuchen Sie, Ihren ProberSet-Import in:

zu ändern %Vor%

Dadurch können neue IProbe-Exporte in den Katalog / Container eingefügt werden, nachdem dieser Import bereits erstellt wurde.

Die Idee hier ist, dass, sobald Sie eine stabile Zusammensetzung erhalten, wir alle Änderungen, die diese Zusammensetzung möglicherweise destabilisieren könnten, ablehnen. In Ihrem Fall haben Sie angegeben, dass Sie eine nicht zusammensetzbare IProbe-Objekte haben möchten gegen diese Anforderung verstoßen.

    
Wes Haggard 16.07.2009, 01:07
quelle

Tags und Links