首页 新闻 会员 周边 捐助

netcore 6.0 在程序运行时执行某类中方法

0
悬赏园豆:10 [待解决问题]

我有一个单例叫Teacher,单例中有个方法叫Runing()

这个单例中依赖了别的单例,叫Student。

我想在程序运行时,就执行Teacher中的Runing()方法。

没有思路,基本功不够扎实,还请能人指教下。

 

services.AddSingleton<Student>();
services.AddSingleton<Teacher>();

public class Teacher
{
    public Teacher(Student s){}
    public async Task Runing(){}
}
mcluzhi的主页 mcluzhi | 初学一级 | 园豆:6
提问于:2023-09-02 23:42
< >
分享
所有回答(3)
0

要在程序启动时执行某个类中的方法,可以使用.NET Core 6.0中的Hosted Services来实现。Hosted Services是一种在应用程序启动和停止时执行后台任务的机制。

首先,你需要创建一个继承自IHostedService接口的类,该类将包含你要在程序启动时执行的方法。在这个类中,你可以注入所需的依赖项,如Student类。

public class MyHostedService : IHostedService
{
    private readonly Teacher _teacher;

    public MyHostedService(Teacher teacher)
    {
        _teacher = teacher;
    }

    public async Task StartAsync(CancellationToken cancellationToken)
    {
        // 在这里执行Teacher的Runing方法
        await _teacher.Runing();
    }

    public Task StopAsync(CancellationToken cancellationToken)
    {
        // 在这里处理停止时的逻辑
        return Task.CompletedTask;
    }
}

然后,在Startup.cs文件中的ConfigureServices方法中注册该Hosted Service:

public void ConfigureServices(IServiceCollection services)
{
    services.AddSingleton<Student>();
    services.AddSingleton<Teacher>();
    services.AddHostedService<MyHostedService>();
    // 其他服务的注册
}

通过以上步骤,当应用程序启动时,MyHostedService中的StartAsync方法将会被调用,从而执行Teacher的Runing方法。

lanedm | 园豆:2396 (老鸟四级) | 2023-09-04 08:16
0

也可创建基于BackgroundService接口的类来实现

马永猛 | 园豆:213 (菜鸟二级) | 2023-09-05 09:52
1

其实很简单 你只需要在注入后创建一个Scope装载这个单例即可.
services.AddSingleton<Student>();
services.AddSingleton<Teacher>();
//any other service inject

using var scope = services.BuildServiceProvider()!.CreateScope();
var teacher = scope.ServiceProvider.GetRequiredService<Teacher>();
teacher.Runing();

//你的场景其实还是很多见的, 比如注入DBContext的后 你需要 往DBContext中填充一些基础数据.

万雅虎 | 园豆:328 (菜鸟二级) | 2023-09-05 16:36
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册