私は本当にここで立ち往生しています。構造マップInstanceScope.Hybrid asp.net mvc misbehaves
私はasp.net mvcアプリケーションを使用していて、StructureMap 2.5.3(SM)を使用して、コントローラにサービスとリポジトリクラスを注入しています。 コントローラはすべてSM工場で製造されています。
私はハイブリッドでキャッシュしたいLinq to SQLのdatacontextも持っています。
public class DBRegistry:Registry
{
public DBRegistry()
{
ForRequestedType<SharpShopDataContext>()
.CacheBy(StructureMap.Attributes.InstanceScope.Hybrid)
.TheDefault.IsThis(new SharpShopDataContext());
}
}
キャッシングが機能していないように見え、そのためにdatacontextに問題が発生します。
複数のブラウザのリクエストはすべて同じdbcontextを返しますか? 私のリポジトリクラスの1つでは、このコードを書いています。 Debug.WriteLine( "db hashcode:" + db.GetHashCode()+ "" + DateTime.Now.ToString());
DBは=私はここでも、リポジトリを使用してDBおよびサービスを使用してリポジトリのハッシュコードを印刷するのDataContext は、複数の要求の印刷である:
サービスハッシュコード:6238972 26-3-2009 18 :59:34
リポジトリハッシュコード:21756593 26-3-2009 18時59分34秒
デシベルのハッシュコード:7043935 26-3-2009 18時59分34秒
サービスハッシュコード:59389065 26- 3-2009 18:59:34
リポジトリハッシュコード:8331620 26-3-2009午後6時59分34秒
デシベルのハッシュコード:7043935 26-3-2009午後6時59分34秒
サービスハッシュコード:11291358 26-3-2009 18 :59:38
リポジトリハッシュコード:13848497 26-3-2009 18時59分38秒
デシベルのハッシュコード:7043935 26-3-2009 18時59分38秒
サービスハッシュコード:42509361 26- 3-2009 18:59:38
リポジトリのハッシュコード:56101068 26-3-2009午後06時59分38秒
デシベルのハッシュコード:7043935 26-3-2009午後06時59分38秒
あなたは7043935でのハッシュコードで見ることができるようにdatacontextを各リクエストごとに毎回実行しますが、サービスとリポジトリは毎回新しいインスタンスとハッシュコードを取得します。
データベースコンシューマの例外のような奇妙なエラーが発生するのは、データベースが別のソースによって変更されていた間に、dbcontextが前回の4つのwebrequestsの元の値を持つためです。
InstanceScopeをPerRequestに変更すると、同じ結果が得られます。すべてのdbハッシュコードは同じです。手動で2つの別々のdbcontextを作成すると、2つの異なるハッシュコードが与えられます。 – user81129