#c# #asp.net-core #singleton #inversion-of-control
Вопрос:
Ошибка:
Лениво инициализированный тип не имеет открытого конструктора без параметров
Код:
public sealed class LogDataService
{
private static readonly Lazy<LogDataService> logDataService = new Lazy<LogDataService>();
private readonly ILogDataRepository _logDataRepository;
private LogDataService(ILogDataRepository logDataRepository)
{
_logDataRepository = logDataRepository;
}
public static LogDataService Instance
{
get
{
return logDataService.Value;
}
}
public void SaveLogData(Exception exception)
{
// myCode
}
}
Комментарии:
1. Почему бы вам просто не ввести
LogDataService
как синглтон в DI? Здесь есть что-то очень странное. Вы смешиваете статику и ДИ, которые обычно не идут хорошо
Ответ №1:
Error: The lazily-initialized type does not have a public, parameterless constructor
Ошибка достаточно очевидна. Вам нужен общедоступный конструктор без параметров, чтобы заставить его работать. что-то вроде
public LogDataService(){}
Уже упоминалось в документе.
Комментарии:
1. Я хочу использовать _logDataRepository в своем методе SaveLogData, но _logDataRepository имеет значение null, если я использую конструктор без параметров!
2. Тогда это нельзя было сделать с ленивой загрузкой… вместо этого используйте обычный метод, чувак