为什么当我使用.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
时都会创建一个新实例。
答案 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方法。