Ninject删除/替换InThreadScope对象实例

时间:2015-02-23 14:57:30

标签: c# multithreading entity-framework ninject hangfire

我将实体框架上下文注入后台作业(使用Hangfire.io处理)。 Hangfire为每个后台工作者生成线程......但是在同一个worker上运行多个作业。所以我的EF背景可能会被保留很长时间。

我希望在作业执行结束时删除作业线程的Ninject实例。从而导致它在同一个线程中为该类型的下一个分辨率创建一个新实例。

如何从Ninject中的InThreadScope中删除实例?

1 个答案:

答案 0 :(得分:0)

Hangfire可以通过实现IServerFilter的JobFilterAttribute通过执行Job(之前)和执行(之后)来通知您,基本上类似于:

public class MyJobAttribute : JobFilterAttribute, IServerFilter
{

    public void OnPerformed(PerformedContext performedContext)
    {
        //here you'll be called on the same thread of the job after it has been executed

    }

    public void OnPerforming(PerformingContext performingContext)
    {
        //here you'll be called on the same thread of the job that will be executed
    }

}

只需将MyJobAttribute应用于作业的课程/方法