Используя 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>
. Но для Фу оба IBar<int, int>, IFoo
действительны.