1

我正在使用 Ninject 3.0 将服务层数据访问类注入到我的控制器中。我想在运行时将客户端的域用户 ID 添加到这些类,但无法弄清楚我应该使用什么方法。目前我NinjectModule看起来像这样:

public class NinjectBindModule : NinjectModule
{
    public override void Load()
    {
        Bind<ISomeRepo>().To<SomeRepo>();
    }
}

我的问题,实际上分为两部分:

  1. 我应该使用WithConstructorArgument将用户 ID 获取到SomeRepo,还是其他东西(属性?)。我什至可以在绑定模块中执行此操作,还是必须在内核或控制器级别执行此操作?
  2. 我应该使用什么方法来检索客户的域用户 ID?我认为我不能在内核级别或绑定模块中使用Controller.User 属性,可以吗?
4

1 回答 1

5
public class NinjectBindModule : NinjectModule
{
    public override void Load()
    {
        Bind<ISomeRepo>().To<SomeRepo>();
        Bind<IPrincipal>()
            .ToMethod(ctx => HttpContext.Current.User)
            .InRequestScope();
    }
}

接着:

public class SomeRepo : ISomeRepo
{
    private readonly IPrincipal _principal;
    public SomeRepo(IPrincipal principal)
    {
        _principal = principal;
    }

    ... some methods that will have access to the principal
}
于 2012-08-20T12:36:50.710 回答