1

我正在使用 StructureMap 在 ASP.NET 中为每个请求创建 DbEntities 实例。

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

我有一个每 5 秒运行一次的后台任务,它正在尝试使用 DbEntities。

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

现在在方法 RunTasks 中,当我尝试调用 GetDbEntities 时,我得到空引用异常

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

如果 aHttpContext不可用,这应该缓存每个线程的实例。

于 2012-11-16T08:20:36.963 回答