【发布时间】:2022-04-23 01:52:51
【问题描述】:
以下是 CreateHostBuilder 的示例代码。 Asp.net 核心主机负责通过构造函数和中间件解决依赖关系。
如果我们想为我们的自定义类解决它,它没有通过控制器或主方法调用,我们如何跨应用程序获取主机的实例。 是将其存储为静态变量的好方法还是有更好的方法?
public class Program
{
public static async Task Main(string[] args)
{
var host = CreateHostBuilder(args).Build();
using (var serviceScope = host.Services.CreateScope())
{
var services = serviceScope.ServiceProvider;
try
{
var serviceContext = services.GetRequiredService<MyScopedService>();
// Use the context here
}
catch (Exception ex)
{
var logger = services.GetRequiredService<ILogger<Program>>();
logger.LogError(ex, "An error occurred.");
}
}
await host.RunAsync();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
}
【问题讨论】:
-
.Net Core 会在你所有的类中注入它,你可以通过类构造函数得到它,它不是你要找的吗?
-
我想使用 services.GetRequiredService
();在我的内部课程中。最好的方法是什么?如何在任何地方访问相同的服务实例?在静态类中保留一份副本是个好主意吗? -
这适用于所有其他类。如何将 DI 实例的实例存储在容器本身中。
-
为什么需要它的实例?你想解决什么样的问题?
-
在普通的控制台应用程序或工作服务中,我需要一个 IServiceProvider 的实例来解决依赖关系。
标签: c# asp.net-core .net-core