Я пытаюсь добавить внедрение зависимостей в консольное приложение .NET 8, следуя объяснениям в этом видео Как использовать внедрение зависимостей (DI) в консольном приложении C# с ведением журнала, но получаю следующую ошибку:
«Невозможно разрешить службу для типа Microsoft.Extensions.Logging.ILoggerFactory при попытке активировать Microsoft.Extensions.Localization.ResourceManagerStringLocalizerFactory».
Это код 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];
}
}
Это класс Entity Service
public class EntityService(ILocalizationService localization) : IEntityService
{
...
}
Ошибка возникает в этой строке Program.cs.
EntityService service = new(provider.GetService<ILocalizationService>());
Я перепробовал множество решений, найденных при переполнении стека, но ничего не помогло и журналирование не требуется.
Как исправить эту ошибку?
Забыли вызвать services.AddLogging()?





ResourceManagerStringLocalizerFactory зависит от Microsoft.Extensions.Logging.ILoggerFactory, который необходим для разрешения службы через DI.
Вам не хватает вызова LoggingServiceCollectionExtensions.AddLogging . Например, добавьте Microsoft.Extensions.Logging.Console nuget:
services.AddLogging(lb => lb.AddConsole());
Если вам не нужно фактическое ведение журнала, то Microsoft.Extensions.Logging достаточно со следующей регистрацией:
services.AddLogging();
Спасибо! теперь я понимаю, почему у меня возникла эта ошибка. Это работает путем добавления сервисов.AddLogging(), а также с помощью построителя хостов, описанного здесь Learn.microsoft.com/en-us/dotnet/core/extensions/…
@ZotNet да, конструктор хостов по умолчанию включает в себя множество подобных вещей. См. также документацию по общему хостингу .
Регистрационные штампы, похоже, не зарегистрированы. Я не смотрел видео, но получают ли они своего поставщика услуг от HostBuilder?