У меня есть ситуация, когда я хочу, чтобы зависимости вводили мой пользовательский объект, но также помещали текущего пользователя в контейнер IoC.Я хочу, чтобы работали следующие строки:
kernel.Get<User>(); // Should return a new User()
kernel.Get<User>("Current"); // Should return the current user
Можно подумать, что такие привязки будут работать:
Bind<User>().ToSelf();
Bind<User>().ToMethod(LoadCurrentUser).InRequestScope().Named("Current");
Конечно, это дает:
Ninject.ActivationException: Error activating User
More than one matching bindings are available.
Activation path:
1) Request for User
Suggestions:
1) Ensure that you have defined a binding for User only once.
Я понимаю ошибку, поскольку именованная привязка не ограничивает применение этой привязки, поэтому применяются обе привязки.Кажется очевидным, что мне нужно использовать контекстную привязку с методами .When * (), но я не могу придумать никакого способа сделать это.Я чувствую, что должно быть, когда методы, которые определяют, применяется ли именованный экземпляр.Что-то вроде:
// Not valid Ninject syntax
Bind<User>().ToSelf().WhenUnnamedRequested();
Bind<User>().ToMethod(LoadCurrentUser).WhenNamedRequested().InRequestScope().Named("Current");
Я не могу найти никакого места в интерфейсе IRequest
или его свойствах, которые сообщают мне запрошенное имя.Как мне это сделать?