Laden Sie eine Assembly zur Laufzeit, die auf die aufrufende Assembly verweist

8

Meine Anwendung lädt alle Bibliotheks-Assemblies, die sich in ihrem Ausführungspfad befinden, und führt bekannte Methoden für enthaltene Klassen aus.

Ich muss jetzt dasselbe mit einer Assembly tun, die auf meine Anwendungsassembly verweist. Ist das möglich und gibt es negative Auswirkungen, denen ich bewusst sein sollte?

Meisterversammlung:

%Vor%

Untergeordnete Baugruppen:

%Vor%     
Raheel Khan 15.04.2012, 20:20
quelle

4 Antworten

6

Ja, das ist möglich. Solange Ihre Hauptbaugruppe nicht auf die untergeordneten Baugruppen verweist, sollten Sie in Ordnung sein. Andernfalls haben Sie eine zirkuläre Abhängigkeit.

Die Hauptbaugruppe lädt einfach die untergeordneten Assemblys und weiß nichts darüber, außer dass sie eine Schnittstelle implementieren. Auf diese Weise muss die Master-Baugruppe nicht auf die untergeordneten Baugruppen verweisen.

Soweit ich weiß, keine Probleme. Wir verwenden diese Technik erfolgreich für bestimmte Szenarien.

    
Bob Horn 15.04.2012, 20:30
quelle
1

Nach meiner Erfahrung ist daran nichts falsch. In der Tat verwendet MEF diese Technik in Form von AssemblyCatalog (wobei Ihre Implementierungen IN der Master-Assembly sind) und DirectoryCatalog ( wo sich die Implementierungen einer Schnittstelle in Assemblies in einem bestimmten Verzeichnis befinden).

Beide können zusammen in AggregateCatalog ohne Probleme verwendet werden.

    
Steve Danner 15.04.2012 20:27
quelle
0

Das einzige "Problem" ist, dass Sie Assembly0001.Task1 nicht in Ihre Master-Assembly schreiben können, aber Sie können die richtige Aufgabe in der geladenen Assembly finden und diese aufrufen:

%Vor%

Sie müssen noch einige zusätzliche Sicherheitschecks hinzufügen:)

    
XIU 15.04.2012 20:35
quelle
0

Sie haben keinen Code Ihrer LoadAssemblyFromFile-Methode ("...") veröffentlicht, aber wenn sie Assembly.LoadFrom () oder Assembly.LoadFile () zum Laden von Assemblys verwendet, können Sie insbesondere InvalidCastException, MissingMethodException oder andere Ausnahmen erhalten wenn Ihre Anwendung und geladene Baugruppe beide identische Baugruppen referenzieren. LoadFrom () und LoadFile () laden Assemblys in anderem Bindungskontext als Ihre Anwendung. Siehe dies für eine detaillierte Erklärung.

    
Ňuf 15.04.2012 22:10
quelle

Tags und Links