对相同的绑定使用不同的范围

Using different scopes for same binding

我的 NinjectControllerFactory 中有这个绑定:

    private void AddBindings()
    {
        ninjectKernel.Bind<IUnitOfWork>().To<UnitOfWork>().InRequestScope();
    }

并且它适用于向控制器发出请求,只实例化了一个工作单元。

但是当我将 UnitOfWork 注入我的 SignalR Hub 时 class 问题是 SignalR 中的所有方法调用都在相同的请求范围内,并且在用户连接时始终使用相同的 UnitOfWork 实例。

所以,我想使用类似的东西:ninjectKernel.Bind<IUnitOfWork>().To<UnitOfWork>().InScope(ctx => MyHubClass); 这样它每次都会被处理掉。

但是我能否以某种方式仅将此绑定用于注入到 HubClass,而第一个用于所有其他请求?

Ninject 有一个名为的扩展方法: .WhenInjectedInto(类型类型)

在特定类型注入时,您可以在其中设置要注入的对象。 https://github.com/ninject/Ninject/wiki/Contextual-Binding

所以,那你可以做

ninjectKernel.Bind<IUnitOfWork>().To<UnitOfWork>().InRequestScope();
ninjectKernel.Bind<IUnitOfWork>().To<UnitOfWork>().WhenInjectedInto<MyHubClass>().InScope(ctx => ...);

希望对您有所帮助。 抱歉,如果我输入错误,我的 VS 还没有打开