Я добавил LogId в LoggerHelper, чтобы проверить, извлекается ли один и тот же экземпляр обоими методами.
Вот моя настройка:
< Strong>Класс LoggerHelper:
Код: Выделить всё
public class LoggerHelper : ISingletonLoggerHelper
{
public string LogId { get; set; }
}
Код: Выделить всё
public interface ISingletonLoggerHelper
{
string LogId { get; set; }
}
Я регистрирую LoggerHelper как синглтон и присваиваю значение LogId (используя статический метод доступа), чтобы использовать его для будущей проверки
Startup.cs:
Я регистрирую LoggerHelper как синглтон и присваиваю значение LogId (с помощью статического метода доступа) для использования в будущем
Startup.cs:
p>
Код: Выделить всё
services.AddSingleton();
services.AddScoped();
using (var serviceProvider = services.BuildServiceProvider())
{
LoggerHelperAccessor.loggerHelper = (LoggerHelper)serviceProvider.GetRequiredService();
LoggerHelperAccessor.loggerHelper.LogId = "55";
}
Этот класс статического метода доступа используется для доступа к экземпляру LoggerHelper, не более того.
Код: Выделить всё
public static class LoggerHelperAccessor
{
public static LoggerHelper loggerHelper { get; set; }
}
В LoggingService я внедряю LoggerHelper через внедрение зависимостей, а также получаю к нему доступ через статический LoggerHelperAccessor. Однако _loggerHelper и _loggerHelper2 не являются одним и тем же экземпляром, поскольку _loggerHelper.LogId имеет значение null, а _loggerHelper2.LogId имеет значение 55 :
Код: Выделить всё
public class LoggingService
{
private readonly LoggerHelper _loggerHelper;
private readonly LoggerHelper _loggerHelper2;
public LoggingService(ISingletonLoggerHelper loggerHelper)
{
_loggerHelper = (LoggerHelper)loggerHelper; // LogId = null
_loggerHelper2 = (LoggerHelper)LoggerHelperAccessor.loggerHelper; // LogId = "55"
}
}
code> вместо этого, в то время как _loggerHelper2 (доступ к которому осуществляется через статический метод доступа) имеет LogId, установленный на «55». Кроме того, изменение _loggerHelper2 не влияет на _loggerHelper и наоборот, что указывает на то, что они могут быть отдельными экземплярами.
Мой вопрос:< /p>
Почему экземпляр LoggerHelper, внедренный с помощью внедрения зависимостей, не совпадает с экземпляром, полученным с помощью статического LoggerHelperAccessor, несмотря на то, что он настроен в Startup.cs? Что может быть причиной такого несоответствия в моем коде?
Подробнее здесь: https://stackoverflow.com/questions/791 ... c-accessor