通过依赖对象中的ConstructorArgument注入自定义对象
本文关键字:对象 ConstructorArgument 注入 自定义 依赖 | 更新日期: 2023-09-27 18:26:54
我想将我的用户对象注入到我的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"这样的新方法的情况下实现这一点?
您需要确定绑定的范围。
目前,您有一个默认绑定,它是InTransientScope
。。也就是说,每次请求它时,它都会为您提供一个新实例。
你需要用另一种方式来观察它。。可能每个请求一个(对于web):
using Ninject.Web.Common;
Bind<IPrincipal>().To<ConcreteInstanceHere>().InRequestScope();
或在线程范围内:
Bind<IPrincipal>().To<ConcreteInstanceHere>().InThreadScope();
对于它们各自的作用域,它们将为您提供相同的实例。