DryIoc:注册一个依赖的不同依赖
DryIoc: Register with a different Dependency of a Dependency
如何在寄存器语句中覆盖依赖项的依赖项?
例如:
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");
我认为这是一个简单的问题,如果需要其他解释,我会编辑问题。
Dependency of dependency 是一个嵌套的东西,对第一个依赖拥有者是不可见的。否则它会破坏隔离——我为什么要知道我的依赖项实现细节(它们的依赖项)?
要修复代码,您需要为 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)));
如何在寄存器语句中覆盖依赖项的依赖项?
例如:
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");
我认为这是一个简单的问题,如果需要其他解释,我会编辑问题。
Dependency of dependency 是一个嵌套的东西,对第一个依赖拥有者是不可见的。否则它会破坏隔离——我为什么要知道我的依赖项实现细节(它们的依赖项)?
要修复代码,您需要为 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)));