如何在 StructureMap 中使用 `.ForSingletonOf<>`

how to use `.ForSingletonOf<>` in StructureMap

为什么当我使用.ForSingletonOf<T>()时,消息框的结果是false

public static class IoC
{
    public static void InitIoC()
    {
        ObjectFactory.Configure(config =>
        {
            config.ForSingletonOf<IDependency>().Use<ConcreteDepenedency>();
        });
    }
}

消息框:

var instance1 = ObjectFactory.GetInstance<ConcreteDepenedency>();
var instance2 = ObjectFactory.GetInstance<ConcreteDepenedency>();

MessageBox.Show(instance1.Equals(instance2).ToString());

我不想每次调用 ObjectFactory.GetInstance 它都会创建一个新实例。

您正在将 IDependency 类型注册为单例,但是当您解析时(通过 GetInstance),您正在解析 ConcreteDepenedency

您有两种选择来解决此问题:

选项 #1:像这样将 ConcreteDepenedency 注册为单身人士:

config.ForSingletonOf<ConcreteDepenedency>().Use<ConcreteDepenedency>();

选项 #2:解决时,像这样解决 IDependency

var instance1 = ObjectFactory.GetInstance<IDependency>();
var instance2 = ObjectFactory.GetInstance<IDependency>();

顺便说一句,如果你想测试两个变量是否引用同一个对象,使用Object.ReferenceEquals方法。