如何在应用程序启动时从模块运行任务

Startup类用于初始化服务和中间件。它们在租户初始化时调用。
接口OrchardCore.Modules.IModularTenantEvents提供了一种方法来定义首次命中租户(租户激活)时将执行的用户代码。
所有租户都是延迟加载的,这意味着当应用程序启动时,不会调用事件处理程序。取而代之的是,在处理第一个请求时调用它们。
在下面的示例中,类MyStartupTaskService继承自ModularTenantEvents以实现IModularTenantEvents。

using System;
using System.Threading.Tasks;
using Microsoft.Extensions.Logging;
using OrchardCore.Modules;

public class MyStartupTaskService : ModularTenantEvents
{
    private readonly ILogger<MyStartupTaskService> _logger;

    public MyStartupTaskService(ILogger<MyStartupTaskService> logger)
    {
        _logger = logger;
    }

    public override Task ActivatingAsync()
    {
        _logger.LogInformation("A tenant has been activated.");

        return Task.CompletedTask;
    }
}

然后在模块的Startup.cs文件的ConfigureServices()方法上注册该类。

services.AddScoped<IModularTenantEvents, MyStartupTaskService>();

说明:ActivatingAsync事件按其注册顺序调用,该顺序派生自模块依赖关系图。ActivatedAsync事件以相反的顺序调用。

当从终端运行时,您应该在处理第一个请求后看到如下输出:

info: MyStartupTaskService[0]
      A tenant has been activated.

 

posted @ 2021-09-24 15:36  doknowmi  阅读(136)  评论(0)    收藏  举报