3

HTTP リクエストの終了時に autofac がオブジェクトを破棄しないことについて、以前ここで質問しました。私は今、より大きな問題を抱えていると思います.なぜなら、それが同じオブジェクトのリクエストツーリクエストを提供しているという証拠があるからです. 繰り返しますが、私はこちらの指示を使用しています。デリゲート構文を使用してオブジェクトを作成しているため、私のテストはもう少し複雑ですが、リクエストの有効期間にフラグを立てていると思います。Global.asax.cs:

protected void Application_Start(object sender, EventArgs e)
{
    ...
    var builder = new Autofac.Builder.ContainerBuilder();
    builder.Register<IDBConnectionSelector>(
            (c) => new CachingDBConnections(ConstructorArgs...))
        .HttpRequestScoped();

    var container = builder.Build();
    _containerProvider = new ContainerProvider(container);
}
public IContainerProvider ContainerProvider
{
    get { return _containerProvider; }
}
static IContainerProvider _containerProvider;

ここでの私の意図は、IDBConnectionSelector を登録して、カスタム コンストラクターで作成された具象型の CachingDBConnections を取得することですが、HTTP 要求スコープを使用することです。

CachingDBConnections オブジェクトのいくつかのメソッドが後続のリクエストで失敗するため、リクエストごとに新しいものではなく、前回取得したものと同じものを取得していると思われます。

それは理にかなっていますか?私は何を間違っていますか?

4

2 に答える 2

2

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

例えば

A -> B -> C

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

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

私の推測はどうですか?これが問題ですか?

ニック

于 2009-09-03T17:50:21.327 に答える
1

私はそれを考え出した!

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

ああ!

于 2009-09-03T17:55:52.030 に答える