웹 응용 프로그램과 통신하는 각기 다른 API에 대해 HttpClient
의 인스턴스를 만듭니다.종속성 주입을 사용하여 HttpClient의 여러 인스턴스 관리
비즈니스 클래스에 HttpClient
을 삽입하려면 SimpleInjector으로 종속성 삽입을 사용하고 싶습니다. 예를 들어 ITwitterBusiness
과 IInstagramBusiness
이 있고 둘 다 해당 생성자에 HttpClient
을 허용합니다.
종속성 삽입을 사용하여 동일한 유형의 여러 개체를 등록 할 때 가장 좋은 방법은 무엇입니까?
나는이 문제의 일부가 내 디자인 일 수 있다고 확신하지만 여기에 몇 가지 아이디어가있다.
내 첫번째 생각은
container.Register<ITwitterBusiness>(() => new TwitterBusiness(httpClientTwitter));
은 간단한데 디 등록에 대리자를 사용하는 것입니다,하지만이 방법은 SimpleInjector 느리게 실행함으로써, 예를 들어, 어떤 나쁜 부작용이 있을지 모르겠어요 또는 내가 어떤 디자인 패턴을 깨뜨리고 있다면.
내 두 번째 생각은 나는이 날 특정 클래스에 예를 HttpClient를 특정을 삽입 할 것으로 예상 컨텍스트 기반의 주입을http://simpleinjector.readthedocs.io/en/latest/advanced.html#context-based-injection
을 사용하는 것입니다. 아직도 정확히 어떻게 작동하는지 확실하지 않습니다.
디자인으로 이것을 해결할 수 있는지 궁금합니다. 예를 들어, 더미 클래스를 작성합니다. 난 단지 좋은 예제를 찾지 못했지만 정확하게 이해한다면 HttpClientTwitter
같은 상속받은 더미 클래스를 만들 수 있고 HttpClient
을 상속받습니다. 그런 식으로 모호한 등록을 제거 할 수 있습니다.
감사합니다!
감사합니다. 스티븐. 모든 HttpClient 인스턴스가 싱글 톤이라는 점을 잊어 버렸습니다. 따라서 Twitter HttpClient 인스턴스가 응용 프로그램의 수명과 함께 재사용됩니다. 저는 항상 정적 변수를 피하는 경향이 있습니다. 그러나 TwitterBusiness 내부의 정적 변수로 사용할 수 있다고 생각합니다. 생성자에서 null 인 경우 한 번만 초기화하십시오. 어떻게 생각해? 단위 테스트를 위해 HttpMessageHandler를 생성자에 전달할 수 있습니다. – raRaRa
@raRaRa 당신은 트위터 비즈니스를 싱글 톤으로 등록 할 수도 있습니다. 이것은 당신의 httpclient가 여전히 인스턴스 변수가 될 수 있지만 HttpClient가 쓰레드에 안전하다고는 생각하지 않는다는 것을 의미합니다. 그래서 모든 mrthod 안에 그것을 만드는 것이 가장 안전 할 것입니다. – Steven
스레드로부터 안전하므로 최대한 재사용해야합니다. 그것이 내가 싱글 톤이되기를 원하는 이유입니다. 그렇지 않으면 TwitterBusiness에서 필요에 따라 HttpClient의 인스턴스를 만들 것입니다. 그러나 당신이 틀림없이, TwitterBusiness는 싱글 톤으로 등록 될 수 있습니다. 나는 이것을 생각하고 결정을 내려고 노력할 것입니다. 도와 주셔서 감사합니다! :) – raRaRa