我需要根据来电者有条件地组成一个实例。
在某些情况下,我需要一个具有“深”类型“NullService”的复合对象实例
在其他情况下,我改为注入“ConcreteService”
我期待这样的事情:
Get<Root>.with(NullService)
或
Get<Root>.with(ConcreteService)
或者更好的是,如果可以绑定构造,使其回溯到调用上下文
Bind<IService>.to(ConcreteService).
Bind<IService>.to(NullService).only.whenCallerIsTypeOf(CallerWhosNeedsANullService)
有可能吗?
答案 0 :(得分:1)
有两种方法:
使用自己的条件,以防您可以计算应该使用哪一个:
Bind<IService>.To(NullService)
.When(ctx => IsCallerWhosNeedsANullService(HttpContext.Current.Request));
使用命名绑定
Bind<Root>().ToSelf().Named("DefaultRoot");
Bind<Root>().ToSelf().Named("NullRoot");
Bind<IService>.To(ConcreteService);
Bind<IService>.To(NullService).WhenAnyAnchestorNamed("NullRoot");
Get<Root>("NullRoot");