1

Autofacの初心者はここにいますが、私はこれまでに見たものが好きです。解決されたオブジェクトのリクエストの有効期間を利用しようとしていますが、リクエストが実行された後に破棄が実際に行われていることを確認するのに問題があります。

ページリクエストの最初に取得し、最後に破棄する使い捨てオブジェクトがあります。現在、autofacを使用してオブジェクトのインスタンスを取得していますが、autofacが処理を実行するかどうかを確認したいと思いました。

問題のオブジェクトにDispose()メソッドをインストルメントしましたが、ページがライフタイム管理を行うと、「fire」であることがわかります。私が自分自身を処分しないとき、私は証拠を見ませんが、autofacにそれをさせます。

これらの手順を使用して、web.configやglobal.asaxの変更など、thignsを構成しています。オブジェクトをうまくインスタンス化することはできますが、実際に破棄されているかどうかはわかりません。別のステップはありますか?

4

4 に答える 4

1

再投稿からの回答の繰り返し:

ほとんどの場合、(どの IoC コンテナーでも) 依存関係のチェーンに沿った 1 つのコンポーネントがシングルトンであることがわかります。

例えば

A -> B -> C

A が「factory」、B が「singleton」、C が「factory」の場合、A を解決すると、常に同じ C を参照するシングルトン B への参照が取得されます。

Aを解決するたびに新しいCが作成されるようにするには、Bも「工場」でなければなりません。

于 2009-09-03T17:54:43.857 に答える
1

私はそれを考え出した!

オブジェクト インスタンスの間違ったコンテナーを要求していました。要求コンテナーではなく、オブジェクトのアプリケーション コンテナーを要求していました。

ああ!

于 2009-09-03T17:57:29.780 に答える
1

ページ内でオブジェクトを手動で破棄するか、Autofac モジュールに任せるかにかかわらず、リクエストのライフサイクルに関してオブジェクトが破棄されるタイミングに違いがあります。Autofac ContainerDisposalModuleは、リクエスト ライフサイクルの最後にある HttpApplication.EndRequest が起動されるまで、リクエスト コンテナとオブジェクトを破棄しません。

オブジェクトの Dispose メソッドへの呼び出しをトレースする方法によっては、出力が表示されない可能性があります。Dispose メソッドをどのように計測していますか?

于 2009-09-02T21:18:55.020 に答える
0

Dispose は、「Dispose」メソッドを定義できるインターフェイスにすぎません。使い捨てクラスを要求する最も一般的な用途は、そのクラスに明示的に解放する必要があるリソース (Windows リソース ハンドルなど) がある場合です。ほとんどの場合、IDisposable インターフェイスは必要ありません。ガベージ コレクターは非常に強力であり、メモリ管理においてはるかに優れた仕事をするからです。ただし、ハンドルをすぐに解放しなければならないケースがたくさんあることは明らかなので、次のポイントである IDisposable の実装に進みます。

してはいけないこと:

var myClass = MyDisposableClass();

// do stuff with myClass

myClass.Dispose();


Proper usage:

using (var myClass = MyDisposableClass())
{
    // do stuff with myClass
}

コンパイラは、次のように効果的にビルドします。

MyDisposableClass myClass = MyDisposableClass();
try
{
    // do stuff with myClass
}
finally
{
    myClass.Dispose();
}

重要な違いは、何が起こっても Dispose が呼び出されることを知っていることです。さらに、デストラクタ (存在する場合はガベージ コレクタによって呼び出されます) を関連付けることができ、これを関連付けて Dispose メソッドを呼び出すことができます。ただし、何らかの理由でこれを行う必要がある場合は、同じリソースを 2 回解放しないようにしてください (解放後にポインターを null に設定します)。

于 2009-09-02T20:33:49.013 に答える