2015-11-02 33 views
0

在我NinjectControllerFactory我有这样的结合:使用不同范围的同一结合

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

而且它可以很好地用于请求控制器,工作只有一个单元被实例化。

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

所以,我想要使用像这样的东西:ninjectKernel.Bind<IUnitOfWork>().To<UnitOfWork>().InScope(ctx => MyHubClass);所以它得到处置每一次。

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

+1

有可能使用自定义范围,请参阅https://github.com/ninject/ninject/wiki/Object-Scopes – Diginari

回答

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

+0

真棒,谢谢! – Aleksa