通过依赖对象中的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"这样的新方法的情况下实现这一点?

通过依赖对象中的ConstructorArgument注入自定义对象

您需要确定绑定的范围。

目前,您有一个默认绑定,它是InTransientScope。。也就是说,每次请求它时,它都会为您提供一个新实例。

你需要用另一种方式来观察它。。可能每个请求一个(对于web):

using Ninject.Web.Common;
Bind<IPrincipal>().To<ConcreteInstanceHere>().InRequestScope();

或在线程范围内:

Bind<IPrincipal>().To<ConcreteInstanceHere>().InThreadScope();

对于它们各自的作用域,它们将为您提供相同的实例。