在StructureMap中使用HttpContextScoped,ASP.NET在后台线程中抛出空引用异常

时间:2012-11-16 07:45:41

标签: asp.net structuremap httpcontext

我正在使用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();
}

1 个答案:

答案 0 :(得分:2)

尝试:

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

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