我正在修改现有的代码库以更好地利用 autofac 容器。我遇到的情况是,很多东西都用来直接从容器中以经典的ServiceLocator
反模式解析它们的组件。我正在使用LifetimeScope
.
我面临的问题是,某些组件LifetimeScope
在实施时必须从孩子那里解决,IDisposable
并且必须被处置。如果它们在根范围内得到解决,那将永远不会发生。
有什么办法可以防止某些组件在根范围内被解析?崩溃运行时对此是可以的,因为我将一一处理这些案例并根据需要引入范围。我能想到的唯一方法是创建一个小虚拟组件,该组件在根生命周期范围内解析一次并解析.InstancePerLifetimeScope()
,并将其静态存储在某处。然后,当解决以后的组件时,我将获得其中一个虚拟组件,并查看它是否与根范围内的实例相同。虽然有点笨拙,有没有更好的方法?