2015-11-02 35 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