使用不同的范围进行相同的绑定

时间:2015-11-02 16:12:40

标签: c# asp.net .net signalr ninject

我在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 个答案:

答案 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的东西