Указание конечной точки API во время выполнения при использовании NSwagStudio

У меня есть клиент API, созданный NSwagStudio. Мой конструктор для одной из моих конечных точек выглядит так:

 private string _baseUrl = "http://localhost:11957";
    private System.Net.Http.HttpClient _httpClient;
    private System.Lazy<Newtonsoft.Json.JsonSerializerSettings> _settings;

    public AccountClient(System.Net.Http.HttpClient httpClient)
    {
        _httpClient = httpClient; 
        _settings = new System.Lazy<Newtonsoft.Json.JsonSerializerSettings>(() => 
        {
            var settings = new Newtonsoft.Json.JsonSerializerSettings();
            UpdateJsonSerializerSettings(settings);
            return settings;
        });
    }

   public string BaseUrl 
        {
            get { return _baseUrl; }
            set { _baseUrl = value; }
        }

Сгенерировано около 5 таких клиентов. Очевидно, что для производственных сред я хочу, чтобы конечная точка моего API была другой. На данный момент я использую подсказки компилятора (#if debug) для установки локальных или производственных конечных точек.

Поскольку все 5 из этих клиентов получают зависимость, введенную как одноэлемент, есть ли простой способ настроить BaseUrl для использования всеми 5 этими клиентами? Я знаю, что могу просто установить BaseUrl на раннем этапе для всех 5 клиентов, но я чувствую, что должен быть более простой способ сделать это, а не просто скопировать макароны.

Спасибо!

РЕДАКТИРОВАТЬ: В NSwagStudio я пытался создать «класс конфигурации», но не мог легко понять, как его использовать или применить к этому сценарию.


person Lewis Cianci    schedule 02.05.2019    source источник


Ответы (1)


Вы можете установить serverHost на «.» так что URL-адрес является параметром ctor

person Rico Suter    schedule 03.05.2019
comment
Хорошо, круто, но как я могу использовать это при внедрении зависимостей, где я могу указать только интерфейс и конкретную реализацию? - person Lewis Cianci; 04.05.2019
comment
Существуют и другие варианты регистрации di, в которых вы можете указать параметр url - person Rico Suter; 04.05.2019
comment
Хорошо. Я привык только использовать внедрение зависимостей с помощью интерфейса, а затем указывать реализацию этого интерфейса. Со сгенерированным клиентом nswag я не получаю сгенерированный интерфейс .... поэтому я не вижу, как его ввести :(. Я ошибаюсь здесь концом палки? Я также не могу понять, как объект конфигурации работает для клиентов nswag.Документация говорит об этом, но не совсем то, как его использовать как таковой. - person Lewis Cianci; 08.05.2019
comment
Так что это была моя ошибка, я пропустил огромную кнопку создания интерфейсов в NSwagStudio. Теперь я создаю интерфейсы и использую DI как обычно. Он отлично работает (в Xamarin Forms тоже!). Это так, так хорошо, спасибо за NSwagStudio :) - person Lewis Cianci; 08.05.2019