Использование Ninject 3.0.0-RC3 можно использовать
kernel.Bind(
x => x.FromThisAssembly()
.SelectAllClasses().InheritedFrom(typeof(BaseService<>)).WhichAreGeneric()
.BindToAllInterfaces());
В зависимости от ваших требований вы возможно, удалит оператор WhichAreGeneric
. .SelectAllClasses().InheritedFrom(typeof(BaseService<>)).WhichAreGeneric()
выбирает классы, для которых создается привязка.
Условные обозначения гарантируют, что интерфейс и класс реализации должны иметь одинаковые аргументы открытого типа. Например. В случае
interface IBar<T1, T2>
interface IBaz<T>
interface IFoo
class Bar<T1, T2> : IBar<T1, T2>, IBaz<T1>, IFoo
class Foo : IBar<int, int>, IFoo
IBar<T1, T2>
является единственным правильным интерфейсом для Bar<T1, T2>
. Но для Foo действуют как IBar<int, int>, IFoo
.
OK, спасибо за ваш быстрый ответ (на данный момент я нахожусь на Autofac) –
Теперь это возможно с помощью Ninject 3.0.0-rc3 –
Спасибо за обновление, когда выйдет 3,0 финала? –