当以编程方式初始化之前已注册为单例的新组件实例时,Autofac 的行为如何

How does Autofac behave when a new component instance is initialized programmatically that has been registered as a singleton before

假设我有一个服务器端应用程序,它广泛使用线程安全组件。我没有在每次需要时都创建一个新的组件实例,而是使用 Autofac 在系统启动期间注册、管理和解析该组件的单例实例,如 here.

所述

现在我的问题是:尽管注册了 Autofac,但如果在源代码中的某处以编程方式 (ComponentName c = new ComponentName();) 初始化此组件的新实例,会发生什么情况。

这是我的假设:

(案例 1) 如果初始化语句是属于已定义 Autofac DI 容器的应用程序集的源代码的一部分,Autofac 将 return 组件的注册单例实例。

(Case 2)如果初始化语句属于外部第三方库的源代码,那么每次语句都会创建一个新的组件实例被执行。 Autofac 没有作用。

我的假设是朝着正确的方向发展还是完全错误?

此致,马蒂亚斯

Autofac 不控制也不是 "aware" 它不解析的对象实例。当您将依赖项注册为单例时,这会告诉 Autofac 如何解决依赖项 - 重用相同的实例。同时,您可以创建任意数量的相同 class.

实例

将依赖项注册为单例实际上并不会使指定的 class 成为单例。对于 "real" 单例,只能存在 class 的一个实例,因为每次调用都获得一个实例 returns 相同的实例。将依赖项注册为单例只是告诉容器表现得好像 class 是单例,重用一个实例而不是创建新实例。