Mam ogólnego interfejsu IRepository<T>
i dwie implementacje xrmRepository<T>
i efRepository<T>
Ninject kontekstu Oprawa w/Otwórz Generics
Chcę zmienić wiązanie na podstawie T
dokładniej używać xrmRepository
gdy T
wywodzi Entity
. Jak mogę to zrobić?
Obecnie mam:
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();
Ale gdy próbuję rozwiązać IRepository<Contact>
idzie do efRepository, choć Kontakt dziedziczy podmiotu.
Nie chcę używać nazwanych wiązań, w przeciwnym razie będę musiał dodawać nazwy wszędzie.
Nie działa z wykorzystaniem klasy bazowej "Jednostka". Nadal wiążę się z efRepository. Działa, jeśli używa samej klasy (np. Kontakt). –
Czy chcesz rozwiązać IRepository dla xrmRepository dla wszystkich podklas Entity? – treze
Tak! Ale prawdopodobnie utworzę IXRMRepository: IRepository, ponieważ nie mogę go uruchomić. –