【发布时间】:2021-11-03 12:09:14
【问题描述】:
在我的 .NET Core 控制台应用程序中,此行冻结:
services.GetRequiredService<ISomething>();
在以下代码中:
interface ISomething { }
class Cool : ISomething
{
public Cool(IHttpClientFactory factory) { }
}
class Program
{
static async Task Main(string[] args)
{
var host = CreateHostBuilder(args).Build();
await host.StartAsync();
// Freezes here and maxes out memory
ISomething internalApiConnector = host.Services.GetRequiredService<ISomething>();
await host.RunAsync();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureServices((_, services) =>
{
services.AddHttpClient<IHttpClientFactory>();
services.AddSingleton<ISomething, Cool>();
});
}
并最终使内存最大化,最终导致应用程序崩溃。 我错过了什么?
注意:
-
Cool构造函数没有运行,所以似乎没有什么东西在那里停止。
解决方案(谢谢):
serviceCollection.AddHttpClient<IHttpClientFactory>(); 需要更改为
serviceCollection.AddHttpClient();
和
.BuildServiceProvider() 是多余的。
【问题讨论】:
-
运行 .NET 5 并更改以下行
container.ConfigureServices(serviceCollection);在我的机器上运行良好。还有什么不在您的示例中吗? -
另外,在此示例中,您无需在自己的
IOCContainer中调用BuildServiceProvider()。 -
远射,
cool构造函数中是否有容器无法解析的内容? -
1.我决定升级我的视觉工作室,因为它有点落后(我会告诉你是怎么回事) .2。感谢 BuildServiceProvider 说明,我将删除它并查看提供程序在集合中是否不为空。 :) .3。升级后我会记下 .net 5 的东西。我想知道我在做什么。
-
1. BuildServiceProvider 已删除。谢谢。 .2. AddHttpClient 没有做我认为它正在做的事情。谢谢。我认为这就是问题所在。
标签: c# asp.net-core dependency-injection