autofac、ASP.NETの統合、およびHttpRequestScoped
質問
私は以前に私のオブジェクトを配置したときにここにいないのautofacについてhref="https://stackoverflow.com/questions/1369883/autofac-asp-net-integration-and-dispose"> の thier命令を使用しています。私は、オブジェクトを作成するために、デリゲートの構文を使用していますので、私のテストは、もう少し複雑ですが、私は私がリクエスト-寿命のためにそれにフラグを立てると思います。 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;
ここに私の意図は、カスタムのコンストラクタではなくHTTPリクエスト・スコープで作成されたコンクリート型CachingDBConnectionsを取得するためにIDBConnectionSelectorを登録することです。
CachingDBConnectionsオブジェクトのいくつかの方法が、リードは私は私が最後の時間ではなく、すべての要求のためのNEWの1つを得たと同じものを得ていると信じることのように後続の要求に失敗してます。
その理にかなっていますか?何が間違っているのでしょうか?
解決 2
私はそれを考え出した!
Iは、オブジェクトインスタンスの間違ったコンテナを求めていた - 私はオブジェクトではなく、要求コンテナのためのアプリケーション・コンテナを求めた
D'OH!
他のヒント
(任意のIoCコンテナで)この問題が発生した時間のほとんどは、あなたは、依存関係のチェーンに沿って一つの成分がシングルトンであること。
見つけることができます例えばます。
A - > B - > C
Aが「工場」である場合、は、B「はシングルトン」であり、C「は工場」であり、次にAを解決することは、常に同一のCを参照するシングルトンBへの参照を取得します。
あなたがAを解決するたびに作成されますするための新しいCためには、Bはまた、「工場」である必要があります。
どのように私の推測ですか?これは問題ですか?
ニック