У меня есть приложение, которое использует Ninject для своего DI. Я добавляю несколько новых классов, и они не решаются так, как я думаю.
У меня есть класс Foo
, который реализует интерфейс ISomething
. Если я настраиваю привязки следующим образом:
kernel.Bind<Foo>().ToSelf().InSingletonScope();
kernel.Bind<ISomething>().To<Foo>();
и затем выполняю:
var foo1 = kernel.Get<Foo>();
var foo2 = kernel.Get<ISomething>();
, то две переменные имеют различных экземпляров класса Foo
.
Если я изменю привязку на:
kernel.Bind<Foo>().ToSelf().InSingletonScope();
kernel.Bind<ISomething>().ToMethod(ctx => ctx.Kernel.Get<Foo>());
, а затем сделаю:
var foo1 = kernel.Get<Foo>();
var foo2 = kernel.Get<ISomething>();
, две переменные имеют одинаковый экземпляр.
Насколько я понимаю, в первом случае он должен разрешить от ISomething
до Foo
, что, в свою очередь, разрешит сам по себе одиночный элемент. Мое понимание неверно, или что-то еще не так? Кажется, немного излишним, чтобы вручную разрешить его.