2016-09-08 11 views
2

У меня есть библиотека библиотеки классов, называемая AppCore, которая хранит весь доступ к базе данных и содержит всю логику приложения.Hangfire в отдельной библиотеке классов DLL, которая вызывается из ASP.Net MVC5

Эта библиотека потребляется приложением ASP.Net (MVC5), которое использует библиотеку для доступа к БД (посредством открытых методов) и специфической для приложения логики (Entity Framework или DBContext не выставляется из DLL).

AppCore имеет несколько методов, которые могут занять несколько минут. Эти методы нужно вызывать из приложения ASP.Net.

Я думаю, мы все знаем, что длинные вызовы в ASP.Net - это все: «Нет, не делайте этого, это сосает тип вещи, и вы будете проклинать для этого».

Поэтому я изучаю Hangfire.io, рекомендованный, среди прочих, Scott Hanselman для длительных вызовов ASP.Net.

Теперь мой вопрос заключается в том, что если кто-нибудь знает, как реализовать Hangfire в библиотеке DLL класса, которая, в свою очередь, будет потребляться приложением ASP.Net. В AppCore.dll есть DbContext, и он имеет длительные методы. Но вызовы будут поступать из ASP.Net, который не имеет прямого знания о базе данных или длинной кодовой логике.

Редактировать: Лучший способ, которым я могу это сделать, - установить Hangfire в приложении ASP.Net и настроить отдельный DBC-текст только для этого. Однако я предпочел бы иметь все это в DLL AppCore и не распространять логику.

+0

Вы находитесь на правильном пути. Hangfire идеально подходит для отложенных задач от ASP.net. Тем не менее, я не уверен, что понимаю источник вашего беспокойства. Вы заявляете, что appcore.dll владеет собственными зависимостями, такими как dbcontext и т. д., однако вы предлагаете создать dbcontext в своем коде ASP.net. Это потому, что вам нужно вставить dbcontext где-нибудь? –

+0

Ну, я предполагаю, что Hangfire нуждается во мне, чтобы запускать вещи в Startup.Configuration сайта ASP.Net (как указано в руководстве). Но поскольку ASP.Net не знает базы данных, это становится сложно. В настоящее время рассматривается возможность создания отдельной базы данных frontend только для Hangfire и не «загрязнять» базовую базу данных. – JensB

+0

Если я просто использую hangfire в отдельной DLL и ничего не делаю при запуске сайта ASP.Net, он все равно будет сохраняться? " – JensB

ответ

2

мой вопрос здесь в том, что если кто-нибудь знает, как реализовать замедленное воспламенение в библиотеки DLL класса, который, в свою очередь, потребляемую в ASP.Net приложение

Вам не нужно осуществлять замедленное воспламенение в коде, который в конечном итоге будет выполнен от hangfire.

Hangfire будет запущен в процессе в ASP.net и будет выполнять этот код с использованием позднего связывания.

Выполняемый код абсолютно не знает, кто его выполняет и не заботится.

В вашем случае это означает, что там, где вы обычно звоните в свой appcore.dll, вы просто заменяете его вызовом hangfire для очереди, а затем выполняете задачу.

Допустим, ваш appcore.dll обнажает следующую операцию:

interface IDoSomethingBig 
{ 
    void DoSomethingBig(); 
} 

Вы можете сказать, замедленное воспламенение выполнить это следующим образом:

BackgroundJob.Enqueue<IDoSomethingBig>(x => x.DoSomethingBig()); 

Любые зависимостей, которые appcore.dll имеет, которые должны быть удовлетворены будут решены и поставлены в очередь рядом с задачей как контекст исполнения.

 Смежные вопросы

  • Нет связанных вопросов^_^