StructureMap使用(Func <t>) - 仅解析一次</t>

时间:2012-06-26 08:14:15

标签: c# structuremap

我使用结构图来解析我的依赖关系,但是我有一个相当特殊的情况,我希望通过方法调用构建依赖关系。 每次我使用GetInstance()时都会调用此方法,但它只执行一次。

我的声明如下:

x.For<UserService>().Use(c => { return MultiObjectProvider.GetInstance<UserService>(); });

也尝试了

x.For<UserService>().LifecycleIs(new ThreadLocalStorageLifecycle()).Use(c => { return MultiObjectProvider.GetInstance<UserService>(); });

没有改变任何东西。 有谁知道我每次都能如何解决结构图?

1 个答案:

答案 0 :(得分:2)

那应该有用。我认为问题可能在你的MultiObjectProvider.GetInstance方法中(可能在连续调用中返回相同的实例)而不是在这里。

这是一个快速的单元测试,我把它放在一起模仿你拥有的东西(我只使用了System.Guid而不是你的UserService),并通过了。

    [TestInitialize]
    public void Initialize()
    {
        ObjectFactory.Initialize(x =>
        {
            x.For<Guid>().Use(c => { return Guid.NewGuid(); });
        });
    }

    [TestMethod]
    public void Test()
    {
        var o1 = ObjectFactory.GetInstance<Guid>();
        var o2 = ObjectFactory.GetInstance<Guid>();
        Assert.AreNotSame(o1, o2);
    }

旁注:您可以按如下方式简化语法:

x.For<UserService>().Use(() => MultiObjectProvider.GetInstance<UserService>());

甚至

x.For<UserService>().Use(MultiObjectProvider.GetInstance<UserService>());