小能豆

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

javascript

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

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

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

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

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

public class Teacher
{
    public Teacher(Student s){}
    public async Task Runing(){}
}

阅读 55

收藏
2024-06-24

共1个答案

小能豆

在.NET Core 6.0 中,如果你想在程序启动时执行某个类的方法(例如 Teacher 类的 Runing 方法),可以利用.NET Core 的 Hosted Service 功能来实现。Hosted Service 允许你在应用程序启动时执行后台任务或周期性任务。

实现步骤:

  1. 定义 Teacher 类和 Student 类:

```csharp
public class Student
{
// Student 类的实现
}

public class Teacher
{
public Teacher(Student s)
{
// 在构造函数中注入依赖的 Student 类
}

   public async Task Running()
   {
       // 在 Running 方法中定义需要在程序运行时执行的逻辑
       Console.WriteLine("Teacher is running...");
       await Task.Delay(1000); // 示例的异步操作
   }

}
```

  1. 注册依赖关系:

Program.cs 文件的 CreateHostBuilder 方法中注册 StudentTeacher 类:

```csharp
public class Program
{
public static async Task Main(string[] args)
{
var builder = CreateHostBuilder(args);
var host = builder.Build();

       // 获取 Teacher 实例并执行 Running 方法
       var teacher = host.Services.GetRequiredService<Teacher>();
       await teacher.Running();

       await host.RunAsync();
   }

   public static IHostBuilder CreateHostBuilder(string[] args) =>
       Host.CreateDefaultBuilder(args)
           .ConfigureServices((_, services) =>
           {
               services.AddSingleton<Student>();
               services.AddSingleton<Teacher>();
           });

}
```

解释和注意事项:

  • 主程序入口 (Main 方法):Main 方法中,通过 CreateHostBuilder 方法创建主机 (Host),然后获取 Teacher 类的实例,并调用其 Running 方法。这样可以确保在程序启动时即执行了 Teacher 类中的逻辑。

  • Hosted Service 替代方案: 如果 Running 方法需要作为长时间运行的任务,你可以考虑将其封装为一个 IHostedService 实现,并在 ConfigureServices 中注册,以便在应用程序启动时自动执行。

  • 依赖注入: 通过依赖注入容器 (IServiceCollection) 注册 StudentTeacher 类,确保在需要时可以自动解析其依赖关系。

通过这种方法,你可以在.NET Core 6.0 中实现在程序运行时执行特定类的方法,并且利用依赖注入来管理类之间的依赖关系。

2024-06-24