结构图 - 不要期望相同的对象

本文关键字:对象 期望 结构图 | 更新日期: 2023-09-27 18:35:18

我在我的 C# 应用程序中使用了结构图,并得到了我不理解或不期望的行为。 希望有人能解释我做错了什么,或者为什么我的期望不正确!

当构造函数采用相同类型的两个参数时,我希望它们是同一类型的单独实例 - 而不是对同一实例的引用。 下面的示例应用演示了这一点。

注册表:(不不使用 Singleton()

    public class DemoRegistry: Registry
    {
        public DemoRegistry()
        {
            For<IController>().Use<Controller>();
            For<IAnInterface>().Use<AClass>();
        }
    }

我的注射类型:

public interface IAnInterface { }
public class AClass : IAnInterface {}

说明问题的类(我不希望 obj1 等于 obj2):

public interface IController {}
public class Controller : IController
{
    private readonly IAnInterface _obj1;
    private readonly IAnInterface _obj2;
    public Controller(IAnInterface obj1, IAnInterface obj2)
    {
        _obj1 = obj1;
        _obj2 = obj2;
        bool sameObject = ob1 == obj2; // this is TRUE
    }
}

最后是运行它的 Main 方法:

    static void Main(string[] args)
    {
        ObjectFactory.Configure(x => x.AddRegistry<DemoRegistry>());
        IController c = ObjectFactory.GetInstance<IController>();
    }

我正在使用.Net 4.0和StructureMap 2.5.4。

所以总结一下:

  • 为什么上面的示例中 obj1 == obj2?

希望这很清楚,如果需要,我很乐意提供更多信息。

结构图 - 不要期望相同的对象

若要在每次需要某个类型的实例时创建新实例,请使用唯一的生存期。

var unique = new UniquePerRequestLifecycle();
x.For<IAnInterface>().LifecycleIs(unique).Use<AClass>();