1

ASP.NET で要求ごとに DbEntities のインスタンスを作成するために StructureMap を使用しています。

ObjectFactory.Initialize(x =>
{
    x.For<DbEntities>().HttpContextScoped().Use(CreateNewDbEntities); 
}

DbEntities を使用しようとするバックグラウンド タスクが 5 秒ごとに実行されています。

timer = new Timer(RunTasks, null, 1000 * 10/*time to wait until the first run*/, 1000 * 5/*time to wait between calls*/);

メソッド RunTasks で、GetDbEntities を呼び出そうとすると、null 参照例外が発生します。

private static void RunTasks(object sender)
{
    var muninService = GetDbEntities(); // Null reference excpetion
}

public static DbEntities GetDbEntities()
{
    return ObjectFactory.GetInstance<DbEntities>();
}

これは、バックグラウンド スレッドで httpcontextscope にアクセスできないためだと推測しています。今、私は構造マップに不慣れで、この問題を開始して修正する必要があるかわかりません。何か案は ?

私が使用する他の方法:

private static DbEntities CreateNewDbEntities()
{
    return new DbEntities();
}
4

1 に答える 1

2

試す:

ObjectFactory.Initialize(x =>
{
    x.For<DbEntities>().HybridHttpOrThreadLocalScoped().Use(CreateNewDbEntities); 
}

が利用できない場合、これはスレッドごとにインスタンスをキャッシュする必要HttpContextがあります。

于 2012-11-16T08:20:36.963 に答える