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%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.
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.
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.
Tags und Links c# reference runtime assemblies