gpt4 book ai didi

c# - 检查组件是否在最外层的 LifetimeScope 中解析

转载 作者:太空狗 更新时间:2023-10-29 21:58:22 27 4
gpt4 key购买 nike

我正在修改现有代码库以更好地利用 autofac 容器。我遇到的情况是,在经典的 ServiceLocator 反模式中,很多东西用于直接从容器中解析它们的组件。我正在使用 LifetimeScope 引入适当的工作单元方案。

我面临的问题是某些组件必须从子 LifetimeScope 中解析,因为它们正在实现 IDisposable 并且必须被释放。如果它们在根范围内得到解决,那将永远不会发生。

有什么方法可以防止某些组件在根范围内被解析?运行时崩溃对此没有影响,因为我将逐一分析这些案例并根据需要引入作用域。我能想到的唯一方法是创建一个小的虚拟组件,该组件在根生命周期范围内解析一次,并在 .InstancePerLifetimeScope() 中解析,并将其静态存储在某处。然后,当稍后的组件被解析时,我将获得这些虚拟组件之一,并查看它是否与存在于根范围内的实例相同。虽然有点笨拙,但有更好的方法吗?

最佳答案

您可以尝试使用“每个匹配的生命周期范围”注册:

containerBuilder.RegisterType<Foo>()
.As<IFoo>()
.InstancePerMatchingLifetimeScope("scope");

这样 IFoo 只有在至少一个祖先生命周期范围是标记生命周期范围并且其标记等于 "scope" 时才能解析。根生命周期范围通常没有标记,因此当您尝试从中解析 IFoo 时,Autofac 将抛出异常。

参见 the Autofac wiki获取更多信息。

关于c# - 检查组件是否在最外层的 LifetimeScope 中解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16443745/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com