Почему похожие. NET Основные службы ведут себя по-разному? - PullRequest
0 голосов
/ 20 февраля 2020

У меня есть две службы net core 2.2, InitialisationHandler и WorkingTicketHandler, одна содержит начальную информацию, а другая предназначена для хранения рабочего билета. InitialisationHandler всегда имеет информацию, готовую при запросе, но WorkingTicketHandler всегда возвращает пустую запись.

Мне нужно выяснить, как удерживать WorkingTicketHandler в своих данных так же, как InitialisationHandler.

Оба добавляются как временные в ConfigureServices и создаются максимально идентично.

Есть одно ключевое отличие: у InitialisationHandler создаются данные во время запуска его методом конструктора, и они читаются только после этого, тогда как WorkingTicketHandler записывается контроллером и перечитывается на том же контроллере (Get vs Post).

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>();
...