Для (1) общим вариантом использования будет клиент, который взаимодействует с одним сервером. Возможно, это интерфейс API, который был создан для использования этим клиентом. Точные данные будут храниться в файле конфигурации, который клиент читает во время запуска.
Мы могли бы заманить наш код прямым доступом к конфигу или ввести строку, считанную из config, в каждое место, которое необходимо построить полный URL. Или мы могли бы просто сконфигурировать BaseAddress
HttpClient, который мы помещаем в наш контейнер Injection Dependency, и просто позволить местам потребления иметь этот объект. Это для меня несколько ожидаемый прецедент.
Для (2) я не думаю, что существует техническое ограничение. Я думаю, что это больше для спасения людей от самих себя. Поскольку установка BaseAddress
и выполнение фактического запроса для выхода через, например, GetAsync
являются отдельными действиями, было бы небезопасно, чтобы два отдельных фрагмента кода делали такую вещь одновременно - вы могли легко получить гонки. Поэтому легче рассуждать о многопоточных программах, которые могут совместно использовать один экземпляр HttpClient
, если такие расы не разрешены в первую очередь.