Как сбросить инициализацию при вызове метода того же класса - PullRequest
0 голосов
/ 29 мая 2020

Далее у меня есть рабочий класс и есть foreach.
Внутри forach есть вызов службы, который может быть GetX (), GetY () ...
в качестве реализации, мне нужно повторно инициализировать клиент Api на основе параметра, есть ли шаблон, чтобы избежать _aService.SetApiClient (p) Line?

public class Worker
    {
        private readonly IAService _aService;

        public Worker(IAService entryPointService)
        {
            _aService = entryPointService;
        }

        protected void ExecuteAsync()
        {
            while (true)
            {
                new List<string>() { "x", "y", "z" }.ForEach(p =>
                {
                    _aService.SetApiClient(p);
                    _aService.GetX();
                    // OR _aService.GetY(),_aService.GetYZ();//
                });

            }
        }
}
        public class AService : IAService
        {
            private GoogleApiClient _googleApiClient;
            public AService(GoogleApiClient apiClient)
            {
                _googleApiClient = apiClient;
            }

            public void SetApiClient(string param)
            {
                _googleApiClient = new GoogleApiClient(new AuthProvider (param));
            }
            public string GetX()
            {
                return _googleApiClient.CallX();
            }
        }

        public interface IAService
        {
            void SetApiClient(string param);
            string GetX();
        }

        public interface IGoogleApiClient
        {
            string CallX();
            string CallY();
            string CallZ();
        }  

public class GoogleApiClient : IGoogleApiClient
    {
        private AuthProvider _param;
        public GoogleApiClient(AuthProvider param)
        {
            _param = param;
        }
        public string CallX()
        {
            return DoSomeCal("X", _param);
        }
        public string CallY()
        {
            return DoSomeCal("Y", _param);
        }
        public string CallZ()
        {
            return DoSomeCal("Z", _param)
        }
    } 

обратите внимание, что значения списка строк могут быть любыми

1 Ответ

0 голосов
/ 29 мая 2020

Вашему клиенту api действительно не нужно хранить состояние. (Закрытое поле}) Это класс службы / шлюза. Скорее просто передайте параметр в методы egGetX (string param}.

...