2016-08-09 2 views
2

Ich baue einen Plugin-Manager mit MEF, und im Idealfall muss ich keinen bereits vorhandenen Code ändern, um es zu bauen. Jede zu verwendende Klasse hat das (bereits existierende) Attribut [MyPlugin] - ist es möglich, implizit basierend auf diesem Attribut mit Hilfe von RegistrationBuilder oder einer anderen Methode zu exportieren? Ich habe nicht in der Lage gewesen, eine Erwähnung, wie zu finden oder, wenn dies machbar ist und es preffered basiert nicht auf der Schnittstelle zu exportieren (obwohl ich werde dies tun, wenn ich muß)MEF Exportieren von Vorhandenem Attribut

Vielen Dank im Voraus

+0

Ich kann nicht herausfinden, was Ihr Problem ist ... Ihre Plugins exportieren oder sie wieder importieren? – lokusking

+0

Da es MEF ist, müssen die Plugins als Exporte markiert werden (einige Möglichkeiten, dies implizit zu tun), bevor sie vom Plugin-Manager mit [Importieren] importiert werden können. Das Problem, das ich habe, ist eher das implizite Exportieren als die Verwendung des [Export] -Attributs - ich muss in der Lage sein, die Klassen zu importieren, ohne sie zu ändern, aber um das zu tun, müssen sie exportiert werden – Bobsicles

Antwort

0

Dies kann leicht mit RegistrationBuilder getan werden - nur das Prädikat müssen nur Typen wählen, die das MyPlugin Attribut:

var builder = new RegistrationBuilder(); 
builder.ForTypesMatching(t => t.IsDefined(typeof(MyPluginAttribute)) && 
           typeof(IPlugin).IsAssignableFrom(t)) 
     .Export<IPlugin>(); 

die erste Bedingung ist, was wirklich zählt - die zweite vermeidet nur Ausnahmen für den Fall, haben Sie irrtümlich markierte eine Klasse, die IPlugin mit dernicht implementiertAttribut.