如何使用`.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
时都会创建一个新实例。
您将IDependency
类型注册为单例,但在解析(通过GetInstance
)时,您正在解析ConcreteDepenedency
。
你有两个选项来解决这个问题:
选项#1:将ConcreteDepenedency
注册为单例,如下所示:
config.ForSingletonOf<ConcreteDepenedency>().Use<ConcreteDepenedency>();
选项#2:当你解析时,像这样解析IDependency
:
var instance1 = ObjectFactory.GetInstance<IDependency>();
var instance2 = ObjectFactory.GetInstance<IDependency>();
顺便说一句,如果您想测试两个变量是否引用了同一个对象,请使用object.ReferenceEquals方法。