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

时间:2013-08-08 10:27:08

标签: c# ninject

我想将我的用户对象注入到我的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'这样的新方法的情况下使其工作?

1 个答案:

答案 0 :(得分:0)

您需要确定绑定的范围。

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

您需要以另一种方式确定范围..也许每个请求一个(对于网络):

using Ninject.Web.Common;

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

或者在线程范围内:

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

对于各自的范围,这些将为您提供相同的实例。