DryIoc:注册不同的依赖依赖关系

时间:2017-11-16 15:32:48

标签: .net dryioc

如何在Register-Statement中覆盖依赖关系的依赖?

例如:

class A {
  public A(IB b) {}
}

class MyService {
  public MyService(A a) {}
}

cnt.Register<MyService>(made: Parameters.Of.Type<IB>(serviceKey: "otherIB")); // ignored by dryioc, because it's a Dependency of Dependency A
cnt.Register<IB, OtherB>(serviceKey: "otherIB");

我认为这是一个简单的问题,如果需要其他解释,我会编辑问题。

1 个答案:

答案 0 :(得分:1)

依赖项的依赖性是嵌套的东西,第一个依赖项所有者不可见。否则它会破坏隔离 - 为什么我应该知道我的依赖项实现细节(它们的依赖项)?

要修复代码,您需要为A添加注册:

cnt.Register<MyService>();
cnt.Register<A>(made: Parameters.Of.Type<IB>(serviceKey: "otherIB"));
cnt.Register<IB, OtherB>(serviceKey: "otherIB");

更新

另一方面,如果您想要基于上下文的依赖关系,可以使用条件注册它:

cnt.Register<IB, OtherB>(setup: Setup.With(condition:
    req => req.Parent.Enumerate().Any(p => p.ServiceType == typeof(MyService)));

cnt.Register<IB, DefaultB>(setup: Setup.With(condition:
    req => req.Parent.Enumerate().All(p => p.ServiceType != typeof(MyService)));