3

NuGet Unity.MVC4 パッケージhttp://nuget.org/packages/Unity.Mvc4/をインストールし、Unity.MVC3 パッケージを使用している場合と同じように接続しました。

依存関係は正しく解決されていますが、HierarchicalLifetimeManager を使用すると、オブジェクトの Dispose() メソッドがリクエストの最後に呼び出されません。

Unity.MVC3 と Unity.MVC4 を使用して、両方のプロジェクトでまったく同じ Bootstrapper.cs コードを使用して、実際に単純なプロジェクトをセットアップしました。MVC3 バージョンでは、Dispose() が呼び出されます。MVC4 バージョンでは、そうではありません。

私は自分のタイプをそのように登録しています

            container.RegisterType<ITest, Test>(new HierarchicalLifetimeManager());

非常に単純な Test クラスで

    public interface ITest
{
    void Foo();
}

public class Test : IDisposable, ITest
{
    public Test()
    {

    }

    public void Foo()
    {

    }

    public void Dispose()
    {

    }
}

間違ったことはしていないと思いますが、Unity.MVC4 パッケージにバグがあるようです。

誰かがそのパッケージをうまく使っているなら、どうやってそれを動かしたのか知りたい.

4

2 に答える 2

3

この問題の最善の解決策は、Unity3にアップグレードし、 Unity Bootstrapper for ASP.NET MVCパッケージをインストールすることです。Bootstrapper パッケージにはPerRequestLifetimeManager、 の代わりに使用する必要があるものが含まれていHierarchicalLifetimeManagerます。統合が完了すると、Dispose()期待どおりにすべての HTTP 要求の最後に呼び出されます。

Unity の最新のドキュメントPerRequestLifetimeManagerでは、絶対に必要な場合を除き、 はまったく使用しないことが推奨されていることに注意してください。(ただし、場合によってはまだ必要だと思います。たとえば、DbContext単一のリクエストで使用されるすべてのオブジェクトで a を共有したい場合などです。)

このソリューションにより、Unity.MVC4 は不要になり、アンインストールできるようになります。

于 2013-06-26T15:35:52.050 に答える