【发布时间】:2023-01-05 19:14:10
【问题描述】:
当您创建一个常规的 .NET 5 或 6 API 项目时,您会得到一些基本类,例如 Program.cs 和 Startup.cs。我想在类项目中复制它,因为我希望能够为依赖注入配置我的服务,但我不希望我的项目中有任何控制器或 HTTP。例如,假设我想使用最少的 API/托管创建一个 .NET 6 项目,并且我想检查目录中的文件更改:
程序.cs
static async Task Main(string[] args)
{
await CreateHostBuilder(args).Build().RunAsync();
}
static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureServices((_, services) => ConfigureServices(services));
static void ConfigureServices(IServiceCollection services)
{
services.AddTranscient<IFileListener, FileListener>();
}
这可能是一个很好的起点,它与 API 项目中的 Startup.cs 非常相似。
在我的FileListener 类中,我想调用一个方法来侦听文件夹中的文件更改。我们称它为StartListening()。我在哪里调用该方法?在某些时候,我想我需要做类似的事情:
var fileListenerService = ((IServiceCollection)services).BuildServiceProvider().GetService<IListener>();
await fileListenerService.StartListening();
但是哪里? Main 方法里面?在ConfigureServices里面?别的地方?
也许我以错误的方式看待这个问题,但本质上我只需要调用一个方法并让它运行该方法直到应用程序关闭。
【问题讨论】:
-
您的文件侦听器看起来很像hosted service,因此您可以将其实现/注册为一个。
-
@GuruStron 嗯,这基本上就是我想要实现的目标。目前,我只是在
ConfigureServices方法中执行了 2 行代码,但我不必使用托管服务来执行此操作。惊人的。非常感谢你!
标签: c# asp.net-core dependency-injection .net-6.0