我有一种情况,我想依赖注入我的用户对象,但也将当前用户放在 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:激活用户时出错 有多个匹配的绑定可用。 激活路径: 1) 用户请求 建议: 1) 确保您只为用户定义了一次绑定。
我理解这个错误,因为命名绑定不限制该绑定的应用,所以两个绑定都适用。很明显,我需要将上下文绑定与 .When*() 方法一起使用,但我想不出任何方法来做到这一点。我觉得应该有检测是否应用了命名实例的方法。就像是:
// Not valid Ninject syntax
Bind<User>().ToSelf().WhenUnnamedRequested();
Bind<User>().ToMethod(LoadCurrentUser).WhenNamedRequested().InRequestScope().Named("Current");
我在界面上找不到任何地方,IRequest
或者它的属性告诉我请求的名称。我该怎么做呢?