Ninject удалить/заменить экземпляр объекта InThreadScope

У меня есть контекст Entity Framework, внедряемый в фоновое задание (обрабатывается с помощью Hangfire.io). Hangfire порождает потоки для каждого фонового воркера... Но запускает несколько заданий на одном воркере. Таким образом, мой контекст EF может храниться в течение длительного времени.

Я хотел бы удалить экземпляр Ninject для потока задания в конце его выполнения. Таким образом, он создает новый экземпляр для следующего разрешения этого типа в том же потоке.

Как мне удалить экземпляр из InThreadScope в Ninject?


person Ben Ford    schedule 23.02.2015    source источник
comment
Почему вы должны использовать InThreadScope, а не просто InTransientScope для контекста EF?   -  person Roy Dictus    schedule 23.02.2015
comment
Используемая фоновая задача состоит из ряда отдельных шагов, не все из которых передают контекст от одного к другому. Однако они передают объекты (чтобы избежать большого количества вызовов БД).   -  person Ben Ford    schedule 23.02.2015


Ответы (1)


Hangfire может уведомлять вас о выполнении задания (до) и выполнении (после) через JobFilterAttribute, который реализует IServerFilter, в основном что-то вроде:

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 к классу/методам вашей работы.

person mCasamento    schedule 24.02.2015