如何在 Quartz.NET 作业中注入 NavigationManager?
How do I inject NavigationManager in a Quartz.NET job?
我有一个 Blazor 服务器端应用程序,它使用 Quartz.NET 到 运行 计划作业。该作业仅调用注入的助手 class...
public class DownloadEmailsJob : IJob {
private readonly EmailDownloadHelper _edh;
public DownloadEmailsJob(EmailDownloadHelper edh) =>
_edh = edh;
public async Task Execute(IJobExecutionContext context) =>
await _edh.DownloadEmails();
}
EmailDownloadHelper
使用注入获取各种服务,例如 DbContext
等。那部分工作正常。
我现在需要从助手 class 内部调用 SignalR 集线器方法。按照代码 in Microsoft's documentation,为了创建集线器连接,我需要做这样的事情...
_hubConnection = new HubConnectionBuilder()
.WithUrl(_navigationManager.ToAbsoluteUri(EmailNotifierHub.Endpoint))
.Build();
...其中 EmailNotifierHub
包含以下行...
public const string Endpoint = "/EmailHub";
这意味着我需要在工作中使用 NavigationManager
的实例。我尝试在构造函数中注入它(就像我在 class 中对其他依赖项所做的那样),但是当它尝试创建集线器连接时,我得到一个异常...
System.InvalidOperationException' in Microsoft.AspNetCore.Components.dll
'RemoteNavigationManager' has not been initialized
NavigationManager
的实例注入正常,这意味着它不是 null,只有当它试图调用 ToAbsoluteUri
时才会出现异常
我之前在注入 classes 时做过这种事情,但在 Quartz.NET 作业中没有,我怀疑问题出在这里。
谁能解释出问题所在以及我该如何解决?谢谢
您的主要问题是 NavigationManager
在 Circuit
之外无法正常工作,而且 Quartz(大概)为应用程序设置了一次。因此,DI 没有可以提供 NavigationManager
.
的范围
在类似的情况下,我通常会放弃在 appsettings.json 中设置站点的基础 url,并使用它来构建我需要的绝对 url。
我有一个 Blazor 服务器端应用程序,它使用 Quartz.NET 到 运行 计划作业。该作业仅调用注入的助手 class...
public class DownloadEmailsJob : IJob {
private readonly EmailDownloadHelper _edh;
public DownloadEmailsJob(EmailDownloadHelper edh) =>
_edh = edh;
public async Task Execute(IJobExecutionContext context) =>
await _edh.DownloadEmails();
}
EmailDownloadHelper
使用注入获取各种服务,例如 DbContext
等。那部分工作正常。
我现在需要从助手 class 内部调用 SignalR 集线器方法。按照代码 in Microsoft's documentation,为了创建集线器连接,我需要做这样的事情...
_hubConnection = new HubConnectionBuilder()
.WithUrl(_navigationManager.ToAbsoluteUri(EmailNotifierHub.Endpoint))
.Build();
...其中 EmailNotifierHub
包含以下行...
public const string Endpoint = "/EmailHub";
这意味着我需要在工作中使用 NavigationManager
的实例。我尝试在构造函数中注入它(就像我在 class 中对其他依赖项所做的那样),但是当它尝试创建集线器连接时,我得到一个异常...
System.InvalidOperationException' in Microsoft.AspNetCore.Components.dll 'RemoteNavigationManager' has not been initialized
NavigationManager
的实例注入正常,这意味着它不是 null,只有当它试图调用 ToAbsoluteUri
我之前在注入 classes 时做过这种事情,但在 Quartz.NET 作业中没有,我怀疑问题出在这里。
谁能解释出问题所在以及我该如何解决?谢谢
您的主要问题是 NavigationManager
在 Circuit
之外无法正常工作,而且 Quartz(大概)为应用程序设置了一次。因此,DI 没有可以提供 NavigationManager
.
在类似的情况下,我通常会放弃在 appsettings.json 中设置站点的基础 url,并使用它来构建我需要的绝对 url。