Ich arbeite an einer Anwendung, die Plugins beim Start von einem Unterverzeichnis lädt, und derzeit mache ich dies mithilfe von Reflektion, um über die Typen jeder Assembly zu iterieren und öffentliche Klassen zu finden, die das IPluginModule implementieren Schnittstelle.Reflection vs. Attribute in Plugin-Architektur
Da Reflection einen Leistungseinbruch beinhaltet, und ich erwarte, dass es nach einiger Zeit mehrere Plugins geben wird, habe ich mich gefragt, ob es sinnvoll wäre, ein benutzerdefiniertes Attribut auf Assemblyebene zu definieren, das überprüft werden kann Typen (möglicherweise etwa ein Dutzend Typen in einer Assembly, einschließlich 1 Implementierer von IPluginModule). Das Attribut, falls vorhanden, könnte dann eine Methode bereitstellen, um die benötigten Typen oder Instanzen zurückzugeben, und das Iterieren über die Typen wäre dann nur ein Fallback-Mechanismus.
Das Speichern der Typinformationen in einer Konfigurationsdatei ist keine Option.
Würde dies die Leistung verbessern, oder spielt es keine Rolle, wie viel Zeit tatsächlich benötigt wird, um die Baugruppe aus dem Speicher zu laden? Würde diese Verwendung überhaupt für ein Attribut geeignet sein?
Leistungshit? Ich würde das von Java erwarten, aber nicht von C# - ich würde gerne wissen, ob und wie du das gemessen hast. –