Я получил этот кодЛенивый Свойство инициализации в статическом классе C#
public static class Logger
{
public static Func<ILogger> LoggerFactory;
private static readonly Lazy<ILogger> _log = new Lazy<ILogger>(LoggerFactory);
public static ILogger Instance
{
get
{
return _log.Value;
}
public static ILogger ConfigureLogging(string AppName, Version AppVersion)
{
// stuff
}
}
}
Этот статический класс используется в приложении:
Logger.LoggerFactory =() => Logger.ConfigureLogging(AppName, AppVersion);
Logger.Instance.Information("Starting application");
Я ожидаю, что первый ряд, чтобы установить LoggerFactory; однако при первой попытке записи в журнал исключение вызывается, потому что статический Func LoggerFactory еще не установлен.
Что не так с этим кодом?
Благодаря
Потому что, когда вы создаете '_log',' LoggerFactory' имеет значение NULL. К тому времени, когда вы выполните 'Logger.LoggerFactory = ...' вы уже инициализировали '_log' –
Вы можете попробовать:' private static readonly Lazy _log = new Lazy (() => LoggerFactory()); ' –