이것이 또 다른 질문의 반복처럼 보이는 경우에 사과하지만, 주제에 관한 기사를 찾을 때마다 대부분 DI에 대해 이야기합니다. 그래서 나는 DI를 얻지 만 모든 사람들이 들어가는 것처럼 보이는 IoC 컨테이너의 필요성을 이해하려고합니다. IoC 컨테이너의 요점은 실제로 종속성의 구체적인 구현을 "자동 해결"하는 것입니까? 어쩌면 내 클래스에는 몇 가지 종속성이없는 경향이 있으며 그로 인해 큰 문제는 보이지 않지만 컨테이너의 유틸리티를 올바르게 이해하고 있는지 확인하고 싶습니다.
나는 일반적으로 비즈니스 로직을 다음과 같은 클래스로 나눕니다.
public class SomeBusinessOperation
{
private readonly IDataRepository _repository;
public SomeBusinessOperation(IDataRespository repository = null)
{
_repository = repository ?? new ConcreteRepository();
}
public SomeType Run(SomeRequestType request)
{
// do work...
var results = _repository.GetThings(request);
return results;
}
}
따라서 하나의 의존성 만 있으며 경우에 따라 두 번째 또는 세 번째가있을 수 있지만 그다지 자주는 아닙니다. 따라서 이것을 호출하는 것은 자체 저장소를 전달하거나 기본 저장소를 사용하도록 허용 할 수 있습니다.
현재 IoC 컨테이너에 대한 이해는 IDataRepository를 해결하는 것입니다. 그러나 그것이 전부라면, 나는 의존성이 전달되지 않을 때 내 운영 클래스가 이미 폴백을 정의하기 때문에 많은 가치를 보지 못합니다. 따라서 내가 생각할 수있는 유일한 다른 이점은 이것은 동일한 대체 저장소를 사용하므로 레지스트리 / 공장 / 컨테이너 인 한 곳에서 해당 저장소를 변경할 수 있습니다. 그리고 그것은 훌륭하지만 그게 맞습니까?
ConcreteRepository
오고 (2) 추가 종속성을 제공 할 수 있습니다 ConcreteRepository
(예 : 데이터베이스 연결이 일반적 임).