1

我需要根据调用者有条件地编写一个实例。

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

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

我期待这样的事情:

Get<Root>.with(NullService)

或者

 Get<Root>.with(ConcreteService)

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

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

可能吗?

4

1 回答 1

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");
    
于 2012-08-10T08:02:08.613 回答