Laden...

MEF: Export einer Klasse die von einer abstrakten Basisklasse und einem Interface ableitet

Erstellt von Mossi vor 13 Jahren Letzter Beitrag vor 13 Jahren 1.365 Views
Mossi Themenstarter:in
199 Beiträge seit 2006
vor 13 Jahren
MEF: Export einer Klasse die von einer abstrakten Basisklasse und einem Interface ableitet

Hallo,

wenn ich mit MEF eine Klasse exportiere, die ein Interface implementiert ist das kein Problem


[Export(typeof(IRepository))]
public class Repository : IRepository
{
    ...
}

Wenn ich aber jetzt dieses Repository auch noch vom einer abstrakten Basisklasse ableite, findet der Resolver die Klasse nicht mehr.


[Export(typeof(IRepository))]
public class Repository: BaseRepository, IRepository
{
    ...
}

Hab ich da irgendwas falsch gemacht oder muss man da noch irgendwas beachten? Eigentlich kann man ja das Objekt auch in diesem Fall genauso mit IRepository darstellen wie davor auch.

502 Beiträge seit 2004
vor 13 Jahren

Hallo Mossi,

das muss an irgendwelchen anderen Faktoren liegen. Ich verwende das von Dir geschilderte Konstrukt tagtäglich ohne Probleme - und ich gebe zumeist in der abegeleiteten Klasse das Interface gar nicht mehr an, sondern nur die abstrakte Basisklasse implementiert es.

Bart Simpson

Praxis ist wenn alles funktioniert und keiner weiss warum.
Theorie ist wenn man alles weiss, aber nichts funktioniert.

Bei uns wird Theorie und Praxis vereint: Nichts funktioniert und keiner weiss warum...

1.044 Beiträge seit 2008
vor 13 Jahren

Hallo Mossi,

beide Klassen exportieren auf den Contract IRepository. Beide Klassen müssen auch gefunden werden. Du musst natürlich beim _Import _oder ImportMany den richtigen Contract-Typen angeben, in deinem Fall IRepository. Ohne den Code von dir getestet zu haben: Ich kann mir nicht vorstellen, dass wenn du auf _IRepository _importierst, Repository(abgeleitet von BaseRepository) nicht gefunden werden kann.

Du kannst alternativ auch Repository auf zwei Contracts exportieren. Beispiel:

[Export(typeof(IRepository))]
[Export(typeof(BaseRepository))]
public class Repository: BaseRepository, IRepository { }

Wird eine Exception geworfen? Ansonsten [Hinweis] Wie poste ich richtig? Punkt 5.

zero_x