gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 21:46:15 25 4
gpt4 key购买 nike

我有一个名为 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com