I'm making a library for other developers to use and it's for communicating with a 3rd party web service. I read the issue that come up around
HttpClient and I would like to handle this properly, so that the library doesn't become a burden.
I thought I would make a base
ServiceClient that would have 3 ways to construct it.
The first would instantiate the
HttpClient itself via using a
static Lazy<HttpClient> to keep a single instance in the lib. If this constructor is never used, the inner object never gets instantiated.
The second constructor would accept an
HttpMessageHandler and instantiate the
HttpClient with it every time. This would be sort of a unit test-friendly mocking constructor that wouldn't get much use otherwise.
The third constructor would accept an
HttpClient instance, making the developer responsible for the lifetime of the object if that is their wish.
My initial thought was that a developer might be already using an
HttpClient in their code and they could pass that same instance to the lib and prevent having more than one instance. But then I thought the client and the lib would be communicating with totally different endpoints and the lib's configuration (base url, headers, etc) would conflict with the calling code, which is not useful for anyone.
So now I'm leaning towards dropping the 3rd constructor, because I'm not sure if it brings anything to the table.
Does anyone have experience with this?