c# - 从 ASP.Net MVC5 调用的单独类库 .dll 中的 Hangfire

标签 c# asp.net hangfire

我有一个名为 AppCore 的类库 DLL,它存储所有与数据库相关的访问并包含所有应用程序逻辑。

此库由 ASP.Net (MVC5) 应用程序使用,该应用程序将库用于所有数据库访问(通过公开的方法)和应用程序特定逻辑( Entity Framework 或 DBContext 未公开到 DLL 之外)。

AppCore 有一些方法可能需要几分钟才能运行。这些方法需要从 ASP.Net 应用程序中调用。

我想我们都知道在 ASP.Net 中长时间运行的调用都是:“不,不要这样做,它会很糟糕,你以后会因为这样做而受到诅咒”。

因此我正在研究其他人推荐的 Hangfire.io Scott Hanselman用于长时间运行的 ASP.Net 调用。

现在我的问题是,如果有人知道如何在类库 DLL 中实现 Hangfire,而该 DLL 又将被 ASP.Net 应用程序使用。 AppCore.dll 中有 DbContext,它有长时间运行的方法。但是调用将来自 ASP.Net,它不直接了解数据库或长时间运行的代码逻辑。

编辑: 我能想到的最好的方法是在 ASP.Net 应用程序中安装 Hangfire,并为此设置一个单独的 DBContext。但是,我更愿意将其全部放在 AppCore DLL 中,而不是四处散布逻辑。

最佳答案

my question here is that if anyone knows how to implement Hangfire in a Class library dll that will in turn be consumed by an ASP.Net application

您不需要在代码中实现 hangfire,最终将被 hangfire 执行。

Hangfire 将在 ASP.net 中运行在进程内,并将使用后期绑定(bind)持久地执行指定的代码。

正在执行的代码完全不知道是谁在执行它,也不关心。

在您的情况下,这意味着在您通常调用 appcore.dll 的地方,您只需将其替换为对 hangfire 的调用以排队,然后执行任务。

假设您的 appcore.dll 公开了以下操作:

interface IDoSomethingBig
{
    void DoSomethingBig();
}

你可以通过以下方式告诉 hangfire 执行此操作:

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

appcore.dll 具有的任何需要满足的依赖项都将被解析并作为执行上下文与任务一起排队。

关于c# - 从 ASP.Net MVC5 调用的单独类库 .dll 中的 Hangfire,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39385356/

相关文章:

c# - 从客户端 C# 连接到多个 TCP 服务器

javascript - Web请求检查服务器

postgresql - 为什么 HangFire 启动过程失败并出现此错误?

c# - 如何在 ASP.NET Web.Api 中运行后台任务?

c# - 条件语句中插入 "1==1"(1等于1)有什么实际用途?

javascript - 从javascript传递到web api 2时如何隐藏或保护 token

c# - ASMX SOAP Web 服务创建复杂类型而不是简单类型

asp.net - 可重用的 jQuery 删除功能

c# - nuget 包 hangfire.aspnetcore 和 hangfire 和 hangfire.core 之间有什么区别?

c# - 使用自然顺序从文件夹加载文件