이것은 큰 문제가 아니며 응용 프로그램이 크지 않을 것이라고 확신하지만 경험할 수있는 곳에서는 DI를 연습하려고합니다. 나는 다음과 같은 클래스를 가지고 있으며, 콘솔 어플리케이션에서 사용자가 입력 한 몇몇 인수를 구문 분석하고 전달 된 인수를 기반으로 ICommand의 인스턴스를 리턴한다. 콘솔 어플리케이션의 명령어를 사용하는 디자인은 Mark Seeman의 책 Dependency Injection에서 가져온다. .그물. 내 문제는 ICommand 클래스의 한 구현은 IDocumentService의 인스턴스가 필요하다는 것입니다. 지금은 ICommand 의존성을 만족시킬 수 있는지 확인하기 위해 IDocumentService를 생성자 삽입을 사용하여 파서에 전달합니다. 클래스에 종속성이있는 경우 의존성을 사용해야하며 종속성에 전달하지 않아야한다고 생각하기 때문에 이것은 이상한 것 같습니다. 동시에 파서 클래스가 문서 루트보다 나중에 IDocumentService를 해석 할 수 있도록 추상 IDocumentServiceFactory를 작성하면 너무 과하게 될 것이라고 생각합니다. 이 디자인 문제를 해결하기위한 모든 지침을 주시면 감사하겠습니다.의존성 주입 다른 콘크리트 유형에 대한 의존성 전달
public class GasTranParser
{
private readonly IArchiveService service;
public GasTranParser(IArchiveService service)
{
if(service == null)
throw new ArgumentNullException("service");
}
ICommand Parse(IEnumerable<string> args)
{
if (args == null || args.Count() != 1)
return new HelpCmd();
List<string> argsList = args.ToList();
return new GasTranComposerCmd(service, argsList[0]);
}
}
, 당신이 대신 GasTranParser에 ICommandFactory을 통과, 콘크리트 CommandFactory을 수 있도록 할 것 같아 적절한 서비스로 GasTranComposerCmd 인스턴스를 생성하십시오. –