我尝试按照本视频中的说明向 .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>());
我尝试了很多在堆栈溢出上找到的解决方案,但没有任何帮助,并且不需要日志记录。
如何修复这个错误?
LoggingServiceCollectionExtensions.AddLogging
电话。例如添加 Microsoft.Extensions.Logging.Console
nuget:
services.AddLogging(l => l.AddConsole());