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

时间:2015-12-12 16:43:30

标签: c# dependency-injection structuremap

为什么当我使用.ForSingletonOf<T>()时,messagebox的结果为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时都会创建一个新实例。

1 个答案:

答案 0 :(得分:1)

您正在将IDependency类型注册为单身人士,但在解决问题时(通过GetInstance),您正在解析ConcreteDepenedency

您有两种方法可以解决此问题:

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

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

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

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

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