【发布时间】:2017-11-29 14:58:43
【问题描述】:
我尝试过这样的事情:
container.Register<IFactory, WebFactory>(
serviceKey: "t");
container.Register<IConfigurationProvider>(made: Made.Of(
r => ServiceInfo.Of<IFactory>(serviceKey: "t"),
f => f.Create()), setup: Setup.With(condition:
req => req.Parent.Enumerate().Any(p =>
p.ServiceType.Namespace.StartsWith("Namespace"))));
container.Register<IFactory, OtherFactory>(
serviceKey: "c");
container.Register<IConfigurationProvider>(made: Made.Of(
r => ServiceInfo.Of<IFactory>(serviceKey: "c"),
f => f.Create()), setup: Setup.With(condition:
req => req.Parent.Enumerate().Any(p =>
p.ServiceType.Namespace.StartsWith("OtherNamespace"))));
container.Register<IFactory, DefaultFactory>();
container.Register<IConfigurationProvider>(made: Made.Of(
r => ServiceInfo.Of<IFactory>(), f => f.Create()));
container.Register<IConfigured, Configured>(made: Made.Of(() =>
new Configured(Arg.Of<IConfigurationProvider>())));
namespace Namespace {
class MyService {
MyService(IConfigured configured) {
}
}
}
namespace OtherNamespace {
class MyOtherService {
MyOtherService(IConfigured configured) {
}
}
}
但是 DryIoc 只是注入了最后一个注册的 IConfigurationProvider 并忽略了条件。我简化了大量代码并替换了配置中的名称(是的,服务类已注册)。
条件和 RequestInfo 的更好文档会很好。
编辑:我现在假设问题是我的工厂默认注册,而 DryIoc 只使用最后一个。
EDIT2:RequestInfo 到底代表什么?被请求的那个人?所以这意味着已配置?还是 RequestInfo.Parent 已配置?枚举什么?整个依赖树?
【问题讨论】:
-
你从哪里使用容器,来自 Asp.Net Core?
-
RequestInfo 表示手头注入依赖的信息。父级正在注入/使用服务。 Enumerate 遍历所有父级从依赖项到解析根。
-
是的,来自带有 services.AddControllersAsServices() 的 ASP.net Core。我的示例中的“注入依赖项”是什么? Parent 是 MyService 还是 MyOtherService 实例?
-
关于 IConfigured 依赖,它们都是父级,但在不同的请求链上
-
这没有帮助。两者的配置几乎相同,具有相同的类结构但名称不同。如果我打电话给 req.Parent 在我的例子中到底是什么?什么代表req? req == IConfigurationProvider 和 req.Parent == IConfigured 和 req.Parent.Parent == MyService / MyOtherService?
标签: dryioc