我在NinjectControllerFactory中有这个绑定:
private void AddBindings()
{
ninjectKernel.Bind<IUnitOfWork>().To<UnitOfWork>().InRequestScope();
}
它适用于对控制器的请求,只实例化一个工作单元。
但是当我将UnitOfWork注入SignalR Hub类时,问题是SignalR中的所有方法调用都在同一个请求范围内,并且在连接用户时始终使用相同的UnitOfWork实例。
所以,我想使用像ninjectKernel.Bind<IUnitOfWork>().To<UnitOfWork>().InScope(ctx => MyHubClass);
之类的东西,所以每次都会被处理掉。
但我可以以某种方式使用此绑定仅用于注入HubClass,第一个用于所有其他请求吗?
答案 0 :(得分:1)
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的东西