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.
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...
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
zero_x | <span style="font-size: 10;">my</span><span style="font-size: 10;">CSharp</span><span style="font-size: 10;">.de</span> - gemeinsam mehr erreichen
Für längere Zeit inaktiv.