如何在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");
我认为这是一个简单的问题,如果需要其他解释,我会编辑问题。
答案 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)));