.Net 8 控制台应用程序 DI 错误“无法解析类型“Microsoft.Extensions.Logging.ILoggerFactory”的服务

问题描述 投票:0回答:1

我尝试按照本视频中的说明向 .Net 8 控制台应用程序添加依赖项注入 如何在带有日志记录的 C# 控制台应用程序中使用依赖项注入 (DI) 但出现以下错误:

“尝试激活“Microsoft.Extensions.Localization.ResourceManagerStringLocalizerFactory”时无法解析类型“Microsoft.Extensions.Logging.ILoggerFactory”的服务。”

这是Program.cs的代码

ServiceCollection services = new();

services.AddLocalization(options => options.ResourcesPath = "Localization");

services.AddSingleton<ILocalizationService, LocalizationService>();
services.AddScoped<IEntityService, EntityService>();

var provider = services.BuildServiceProvider();

EntityService service = new(provider.GetService<ILocalizationService>());

这是LocalizationService类的代码

public class LocalizationService : ILocalizationService
{
public class SharedResource { }

private readonly IStringLocalizer _localizer;
public LocalizationService(IStringLocalizerFactory factory)
{
    var type = typeof(SharedResource);
    var assemblyName = new AssemblyName(type.GetTypeInfo().Assembly.FullName!);
    _localizer = factory.Create("Resource", assemblyName.Name!);
}
public LocalizedString GetKey(string key)
{
    return _localizer[key];
}
}

这是实体服务类

public class EntityService(ILocalizationService localization) : IEntityService
{
   ...
}

错误发生在Program.cs的这一行

EntityService service = new(provider.GetService<ILocalizationService>());

我尝试了很多在堆栈溢出上找到的解决方案,但没有任何帮助,并且不需要日志记录。

如何修复这个错误?

c# .net dependency-injection console-application
1个回答
0
投票

您错过了

LoggingServiceCollectionExtensions.AddLogging
电话。例如添加
Microsoft.Extensions.Logging.Console
nuget:

services.AddLogging(l => l.AddConsole());
© www.soinside.com 2019 - 2024. All rights reserved.