我正在使用StructureMap在ASP.NET中为每个请求创建DbEntities实例。
ObjectFactory.Initialize(x =>
{
x.For<DbEntities>().HttpContextScoped().Use(CreateNewDbEntities);
}
我每5秒运行一次bacgkround任务,试图使用DbEntities。
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();
}
答案 0 :(得分:2)
尝试:
ObjectFactory.Initialize(x =>
{
x.For<DbEntities>().HybridHttpOrThreadLocalScoped().Use(CreateNewDbEntities);
}
如果HttpContext
不可用,这应该缓存每个线程的实例。