我在应用程序的整个生命周期中使用Autofac容器,但我想自己处理这些组件。
IE如果我有builder.RegisterType<SomeType>()
,我不希望容器保留SomeType
的引用,即使没有在其他任何地方引用它们也会保持这些引用(如果使用RegisterInstance
OTOH当然,容器必须保留对单例的引用。
我可以看到我可以builder.RegisterType<SomeType>().ExternallyOwned()
解决我的一种类型的问题,但我不想为每种类型编写它,更重要的是我也使用builder.RegisterSource(new AnyConcreteTypeNotAlreadyRegisteredSource());
我可以选择使用ExternallyOwned
。
有没有办法为整个容器指定“ExternallyOwned”?或者,换句话说,告诉容器禁用整个dispose功能而不保留对它不需要的对象的引用?
答案 0 :(得分:1)
没有办法禁用容器处理服务。您可能会尝试使用something like the logging module,但我可以看到不能100%工作,并且缺少边缘情况,您不小心。
自动跟踪和处理是一种非常常见的容器功能。我建议你不要反对它,而是重构你的代码来接受它。它会让生活变得更轻松。