对相同的绑定使用不同的范围
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 还没有打开
我的 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 还没有打开