我想将我的用户对象注入到我的Principal对象中,如下所示:
kernel.Get<IPrincipal>(new ConstructorArgument("user", user));
这是IPrincipal构造函数的具体实现
public Principal(User user, IUserPermissions userPermissions)
{
/* user is the correct instance, that I passed via ConstructorArgument */
}
直到这里,我没有任何问题。用户对象传递得很好。
但是 IUserPermissions没有收到这个对象。相反,ninject会创建一个新的User实例。这里是IUserPermissions构造函数的具体实现:
public UserPermissions(User user, IDomainRoleValidator domainRoleValidator)
{
/* user is a fresh instance, **not** the one I passed via ConstructorArgument */
}
如何在不添加像'SetUser'这样的新方法的情况下使其工作?
答案 0 :(得分:0)
您需要确定绑定的范围。
目前,您有一个InTransientScope
的默认绑定..也就是说,每次请求时都会为您提供一个新实例。
您需要以另一种方式确定范围..也许每个请求一个(对于网络):
using Ninject.Web.Common;
Bind<IPrincipal>().To<ConcreteInstanceHere>().InRequestScope();
或者在线程范围内:
Bind<IPrincipal>().To<ConcreteInstanceHere>().InThreadScope();
对于各自的范围,这些将为您提供相同的实例。