如何在 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方法。
为什么当我使用.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方法。