У меня есть общий интерфейс IRepository<T>
и две реализации xrmRepository<T>
и efRepository<T>
Ninject контекстная Связывание ж/Open Дженерики
Я хочу, чтобы изменить связывание на основе T
, более конкретно использовать xrmRepository
когда T
происходит от Entity
. Как я могу это сделать?
я в настоящее время:
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();
Но когда я пытаюсь решить IRepository<Contact>
он идет efRepository, хотя Контакт наследует Entity.
Я не хочу использовать Named Bindings, иначе мне придется добавлять имена повсюду.
Не работает, используя базовый класс «Сущность». Все еще привязка к efRepository. Работает, если используется сам класс (например, Contact). –
Вы хотите разрешить IRepository для xrmRepository для всех подклассов Entity? – treze
Да! Но я, вероятно, в конечном итоге создам IXRMRepository: IRepository, потому что я не могу заставить его работать. –