OOTB, Ninject (особенно v1 - в v1 это был необязательный параметр, который по умолчанию включен) внутренне генерирует неявные привязки для конкретных классов к себе, с областью видимости по умолчанию (Transient в v2).Эти регистрации будут добавлены в список «Привязки», как если бы вы добавили их самостоятельно.
Bind<ConcreteClass>().ToSelf(); // .InTransientScope(); -- But that would be implicit
Если вам нужно что-то другое в вашей привязке, вы регистрируете Bind
, прежде чем она будет автоматически привязана,с Ваш бит настройки a la:
Bind<ConcreteClass>().ToSelf().<<Your Customisation Bit>>;
В этом случае ваше средство защиты должно использовать что-то вроде:
Bind<ConcreteClass>().ToSelf().InSingletonScope().WithConstructorArgument( "foo", "bar");
Где InSingletonScope()
будет соответствовать вашемутекущий код в том, что он выглядит так, как будто вы когда-либо хотите создать его экземпляр.В общем, как показано в других ответах, не обязательно обязательно брать InSingletonScope
как средство первой инстанции.