2011-08-03 6 views
1

NuGetパッケージで提供されている標準のWebActivatorを使用して、ASP.NET MVC3プロジェクト用のIoCコンテナとしてMunqを使用しています。ここにサンプル登録があります:Munq IocContainerは、登録されたオブジェクトを一生のうちにどのように処分しますか?

ioc.Register<IUnitOfWork>(i => 
{ 
    return new UnitOfWork("Data Source=foo"); 
}).AsRequestSingleton(); 

マンケルはどのように要求の最後にIUnitOfWorkオブジェクトを処分しますか?私はcodeplexのソースで、これらが処分されていることを示すテストはありません! [

答えて

2

Munqは何も処理しません。この機能が必要な場合は、Autofacなどの別のIoCコンテナを使用する方がよいでしょう。

しかし、多くの場合、コンテナにオブジェクトを廃棄させるための本当の必要性は疑問です。あなたのIUnitOfWorkにはCommit()メソッドがあり、これはおそらくアプリケーションで呼び出されるため、作業ユニットは良い例です。 Commitを呼び出すクラスは、IUnitOfWorkの存続期間の責任を負う可能性が高く、コミットを呼び出すための責任もあります。

あなたはIUnitOfWorkを注入するが、IUnitOfWorkFactoryを注入ないによってこの問題を解決することができます。

using (IUnitOfWork unit = this.uowFactory.CreateNew()) 
{ 
    // Do some useful stuff. 

    unit.Commit(); 
} 

UPDATE 2012年12月:作業単位を必要とするクラスがより次の操作を行うことができます

をWorkインスタンスの単位を登録する方法についての私の意見は(部分的に)に起因して変更されました新しい洞察と私がアプリケーションを設計する方法。工場に注射する代わりに、私は現在IUnitOfWorkを直接注入したいと思っています。これは、定義されたスコープ(Webリクエストなど)が終了した時点で作業ユニットを廃棄すると良いことを意味します。 @DaRKoN_が説明したように、Munq 3.14以降、RequestLifetimeはインスタンスを破棄します。

このStackoverflow question and answerは、工場に注入するのではなく、作業単位を直接注入する時期と方法について完全に説明しています。

+2

Munq 3.14以降:「HttpRequestの最後にRequestLifetimeでIDisposableオブジェクトを破棄する」 – ChadT

関連する問題