Метод Invoke промежуточного программного обеспечения выглядит следующим образом:
Код: Выделить всё
public async Task InvokeAsync(HttpContext context)
{
_telemetryService.InitNewEvent();
_telemetryService.Add("path", context.Request.Path, null); // Add works here
await _next(context);
_telemetryService.Add("statusCode", context.Response.StatusCode, null); // Add throws null error here
_telemetryService.SendEvent(context.Response);
}
Код: Выделить всё
public class TelemetryService
{
private TelemetryClient _telemetryClient;
private List _currentTelemetryEventData;
private Dictionary _finalisedTelemetryEventData;
private string _eventName;
private string _apiName = "pmapi";
public TelemetryService(TelemetryClient telemetryClient)
{
_telemetryClient = telemetryClient;
}
public void InitNewEvent()
{
_currentTelemetryEventData = new List();
Console.WriteLine("New telemetry event inited");
}
public void Add(string key, object data, SeverityLevel? severityLevel)
{
_currentTelemetryEventData.Add(new TelemetryTrace
{
Key = key,
Data = data,
SeverityLevel = severityLevel
});
}
}
Однако я заметил, что если я добавляю telemetryService в качестве ограниченной или временной службы, словарь, в котором хранятся данные журнала, возвращается к нулю после ожидания _next(context) был вызван.
Это имеет смысл для временного процесса, но с определением области видимости. Объекты с областью действия одинаковы в пределах запроса, но различаются в разных запросах. Я ожидал что мое состояние словаря будет сохранено. Но это происходит только с синглтоном. Почему все происходит не так, как я ожидаю?
Подробнее здесь: https://stackoverflow.com/questions/640 ... hin-middle