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();
}