ho un'interfaccia generica IRepository<T>
e due implementazioni xrmRepository<T>
e efRepository<T>
Ninject contestuale Binding w/Open Generics
voglio cambiare l'associazione sulla base di T
, più specificamente utilizzare xrmRepository
quando T
deriva da Entity
. Come posso farlo?
Al momento ho:
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();
Ma quando provo a risolvere IRepository<Contact>
va a efRepository, anche se di contatto eredita entità.
Non voglio usare Named Bindings altrimenti dovrò aggiungere i nomi ovunque.
Non funziona con la classe base "Entity". Ancora vincolante per efRepository. Funziona se si utilizza la classe stessa (come Contatto). –
Vuoi risolvere IRepository in xrmRepository per tutte le sottoclassi di Entity? – treze
Sì! Ma probabilmente finirò per creare un IXRMRepository: IRepository perché non riesco a farlo funzionare. –