1

Iamは依存関係を解決するために構造マップを使用していますが、メソッド呼び出しを介して依存関係を構築したいというかなり特殊なケースがあります。このメソッドは、GetInstance()を実行するたびに呼び出す必要がありますが、実行されるのは1回だけです。

私の宣言は次のようになります。

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

また試されます

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

何も変わりませんでした。構造マップを毎回解決する方法を知っている人はいますか?

4

1 に答える 1

2

それはうまくいくはずです。MultiObjectProvider.GetInstance問題は、ここではなく、メソッド(おそらく連続した呼び出しで同じインスタンスを返す)にあると思います。

これが私があなたが持っているものを模倣するためにまとめた簡単な単体テストです(私はあなたのUserServiceの代わりにSystem.Guidを使用しました)、そしてそれは合格です。

    [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>());
于 2012-06-26T08:52:40.553 に答える