interface IWarrior
{
}
class Samurai : IWarrior
{
}
public class Program
{
public static void Main(string[] args)
{
var kernel = new StandardKernel();
kernel.Bind<IWarrior>().To<Samurai>().When(i =>
{
Console.WriteLine("test");
return true;
});
IWarrior warrior = kernel.Get<IWarrior>();
}
}
Вот очень простой сценарий, я создаю фиктивный интерфейс + реализация и связать их с помощью Ninject вContextual Binding и When
метод, который return true
, а также выход «тест msgstr "сообщение на консоль при вызове. Я думал, что When()
будет вызываться только один раз в Get<>()
ожидается его выход «тест» только один раз, но волшебно (или нет?^_ ^) выводит в 3 раза «тест»,Ninject контекстная связывание Когда вызывается метод слишком много раз
test
test
test
, что означает, что When()
называется 3 раза за один запрос Get<>()
(я добавил еще одну реализацию IWarrior и связал ее, затем количество выходных данных было 6 (3 на привязку)).
Почему это происходит? Мы собираемся поставить некоторые нетривиальные (и слишком много времени) проверки на привязку, но вызов его три раза вместо одного будет проблемой.
Нормально, что 'When' называется многократным временем для одного вызова Get. В любом случае вы не должны ставить логику времени в «Когда». Если вы планируете это сделать, вам следует пересмотреть свой подход к дизайну и решению. – nemesv
Спасибо за ответ, можете ли вы рассказать мне, в чем причина называть его несколько раз? или дать ссылку на статью об этом. – Lev