Ich habe eine generische Schnittstelle IRepository<T>
und zwei Implementierungen xrmRepository<T>
und efRepository<T>
Ninject Kontext-bezogene Bindung w/Open Generics
ich die Bindung basierend auf T
, genauer gesagt xrmRepository
verwenden ändern will, wenn T
von Entity
ableitet. Wie kann ich das erreichen?
Ich habe derzeit:
kernel.Bind(typeof(IRepository<>)).To(typeof(efRepository<>)).InRequestScope();
kernel.Bind(typeof(IRepository<>)).To(typeof(xrmRepository<>)).When(request => request.Service.GetGenericArguments()[0].GetType().IsSubclassOf(typeof(Entity))).InRequestScope();
Aber wenn ich versuche IRepository<Contact>
zu lösen geht es zu efRepository, obwohl Kontakt Entity erbt.
Ich möchte keine Named Bindings verwenden, sonst muss ich die Namen überall hinzufügen.
Funktionierte nicht mit der Basisklasse "Entity". Noch immer an efRepository gebunden. Funktioniert, wenn die Klasse selbst verwendet wird (wie Kontakt). –
Möchten Sie IRepository für alle Unterklassen von Entity in xmRepository auflösen? – treze
Ja! Aber ich werde wahrscheinlich am Ende ein IXRM Repository: IRepository erstellen, da ich es nicht zum Laufen kriege. –