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

本文关键字:StructureMap lt 何使用 ForSingletonOf gt | 更新日期: 2023-09-27 18:26:42

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

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

MessageBox:

var instance1 = ObjectFactory.GetInstance<ConcreteDepenedency>();
var instance2 = ObjectFactory.GetInstance<ConcreteDepenedency>();
MessageBox.Show(instance1.Equals(instance2).ToString());

我不希望每次调用ObjectFactory.GetInstance时都会创建一个新实例。

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

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

你有两个选项来解决这个问题:

选项#1:将ConcreteDepenedency注册为单例,如下所示:

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

选项#2:当你解析时,像这样解析IDependency

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

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