Singleton中的结构图返回多个实例

我使用命名实例为同一个接口注册了5个派生类。 所有这些类都注册为Singleton

For().Singleton().Use().Named("Derived1"); For().Singleton().Use().Named("Derived2"); For().Singleton().Use().Named("Derived3"); 

有一个静态类根据输入解析实例。 但是我观察到每次调用ObjectFactory.GetInstance都会在每个请求上返回新实例而不是Singleton。 应用程序中也没有线程。

知道为什么会这样吗?

编辑:

静态解决方案助手会导致任何问题吗? 这是我解析实例的方式。 Singleton在示例应用程序中正常工作,但它在我的机器上不起作用。

要添加更多细节 – 该项目是MVC Web API,我正在本地IIS上进行测试。 我很肯定在应用程序中没有用户创建的线程。

 public static class Resolver { public static IBaseInterface GetHelper(string inputParam) { if inputParam is "Case1" return ObjectFactory.GetInstance("Derived1") //Similarly for other instances } } 

我会小心你正确使用Dependency Injection容器。 例如,您在post中显示的Resolver类是否只是一种工厂或提供者?

使用dependency injection时,您需要确保并遵循RRR模式:注册,解析和发布。 注册应该在您的应用程序的组合根目录中进行。 对于ASP.Net MVC,它通常位于Global.asax ,例如在代码隐藏的Application_Start方法中。 这应该只在每个应用程序池启动时发生一次(对于IIS)。

如果您正在传递容器(或实例化容器并执行注册和稍后解决的对象) – 您不应该这样做 – 您看到的这些“不同实例”可能来自两个不同的容器。 即使您没有在容器周围传递,如果您要在某个地方实例化容器,在每次请求之后,容器被垃圾收集并在后续请求中重新创建,您可能会看到单例的“不同实例”正在解析和实例化的对象; 再次,每个来自容器的不同实例。 validation这一点的一种方法是validation从容器中解析的对象是否也来自同一容器实例。

HTH。