Próbuję wprowadzić właściwość za pomocą ninject
. Biorąc pod uwagę dwa wiązania w poniższym module ninject
, oczekiwałbym, że ConcreteDependency
zostanie wstrzyknięty do B
.
Wygląda jednak na to, że WhenInjectedInto
nie uwzględnia typu, w który wtryskiwany jest tylko typ deklarowanego celu (właściwość w tym przypadku).Zastrzyk własności własności wtryskowej w klasie bazowej
Czy istnieje sposób na zachowanie, którego się spodziewałem?
static void Main(string[] args)
{
var kernel = new StandardKernel(new TestModule());
var b = kernel.Get<B>();
var c = kernel.Get<C>();
}
class TestModule : NinjectModule
{
public override void Load()
{
Bind<IDependency>().To<EmptyDependency>();
Bind<IDependency>().To<ConcreteDependency>().WhenInjectedInto<B>();
}
}
abstract class A
{
[Inject]
public IDependency Dependency { get; set; }
}
class B : A {}
class C : A {}
interface IDependency {}
class EmptyDependency : IDependency { }
class ConcreteDependency : IDependency { }
Jak zarejestrować A, B i C w NInject? –
Nie musisz w Ninject. Ponieważ 'B' i' C' są konkretnymi klasami, nie muszą być jawnie rejestrowane. – Gibsnag