Службы .net core ведут себя по-разному
У меня есть две службы .net core 2.2, InitialisationHandler и WorkingTicketHandler, одна из которых содержит начальную информацию, а другая предназначена для хранения рабочего билета.
InitialisationHandler всегда имеет свою информацию готовой, когда его спрашивают, но WorkingTicketHandler всегда возвращает нулевую запись.
Мне нужно выяснить, как заставить WorkingTicketHandler удерживать свои данные точно так же, как это делает InitialisationHandler.
using VTModels.Other; namespace VT_Online22.Infrastructure.Services { /// <summary> /// Interface for the WorkingTicket Service /// </summary> public interface IWorkingTicketHandler { WorkingTicket GetWorkingTicket(); void SaveWorkingTicket(WorkingTicket argWorkingTicket); void ClearWorkingTicket(); } /// <summary> /// WorkingTicket service class definition /// </summary> public class WorkingTicketHandler : IWorkingTicketHandler { public WorkingTicketHandler() { this.WorkingTicket = new WorkingTicket(); } public WorkingTicket GetWorkingTicket() { return this.WorkingTicket; } public void SaveWorkingTicket(WorkingTicket arg_WorkingTicket) { this.WorkingTicket = arg_WorkingTicket; } public void ClearWorkingTicket() { this.WorkingTicket = new WorkingTicket(); } private WorkingTicket WorkingTicket; private static readonly log4net.ILog logger = log4net.LogManager.GetLogger(typeof(WorkingTicketHandler)); } }
using Microsoft.Extensions.Configuration; using SharedModels.Models; using System.Collections.Generic; using System.Threading.Tasks; using VT_OnlineCore.Infrastructure.Other; using VTModels.Models; namespace VT_Online22.Infrastructure.Services { /// <summary> /// Interface for the Initialization Service /// </summary> public interface IInitializationHandler { void Initialize(); CConfigMasterBase GetConfig(); IEnumerable<CScopeMasterBase> GetScopes(string clientId); } /// <summary> /// Initialization service class definition /// </summary> public class InitializationHandler : IInitializationHandler { public InitializationHandler(IConfiguration configTech) { ConfigurationTech = configTech; Initialize(); } public void Initialize() { this.ldh = new LocalDataHandler(logger, this.ConfigurationTech); this.config = new CConfigMasterBase(); LoadConfig(); } public IEnumerable<CScopeMasterBase> GetScopes(string clientId) { IEnumerable<CScopeMasterBase> scopes = new List<CScopeMasterBase>(); scopes = this.ldh.GetScopes(clientId); return scopes; } public CConfigMasterBase GetConfig() { return this.config; } private async Task LoadConfig() { this.config = this.ldh.GetConfig(); } private LocalDataHandler ldh; private CConfigMasterBase config; private IEnumerable<CScopeMasterBase> scopes; private static readonly log4net.ILog logger = log4net.LogManager.GetLogger(typeof(InitializationHandler)); public IConfiguration ConfigurationTech { get; private set; } } }
services.AddTransient<IInitializationHandler,InitializationHandler>(); services.AddTransient<IWorkingTicketHandler, WorkingTicketHandler>();
Что я уже пробовал:
Оба они добавляются в as transient в ConfigureServices и создаются как можно более идентично.
Существует одно ключевое отличие: InitialisationHandler имеет свои данные, созданные во время запуска его методом конструктора, и только после этого считывается из него, в то время как WorkingTicketHandler записывается контроллером и повторно считывается в том же контроллере (Get vs Post).