调用者上下文绑定NInject

时间:2012-08-01 14:13:41

标签: ninject

我需要根据来电者有条件地组成一个实例。

在某些情况下,我需要一个具有“深”类型“NullService”的复合对象实例

在其他情况下,我改为注入“ConcreteService”

我期待这样的事情:

Get<Root>.with(NullService)

 Get<Root>.with(ConcreteService)

或者更好的是,如果可以绑定构造,使其回溯到调用上下文

Bind<IService>.to(ConcreteService).
Bind<IService>.to(NullService).only.whenCallerIsTypeOf(CallerWhosNeedsANullService)

有可能吗?

1 个答案:

答案 0 :(得分:1)

有两种方法:

  1. 使用自己的条件,以防您可以计算应该使用哪一个:

    Bind<IService>.To(NullService)
        .When(ctx => IsCallerWhosNeedsANullService(HttpContext.Current.Request));
    
  2. 使用命名绑定

    Bind<Root>().ToSelf().Named("DefaultRoot");
    Bind<Root>().ToSelf().Named("NullRoot");
    Bind<IService>.To(ConcreteService);
    Bind<IService>.To(NullService).WhenAnyAnchestorNamed("NullRoot");
    
    Get<Root>("NullRoot");