我确信这没什么大不了的,应用程序也不大,但我正在尝试在任何我可以的地方练习 DI,以获得经验。我有以下类,它所做的只是解析用户在控制台应用程序中输入的一些参数,并根据传入的参数返回一个 ICommand 实例。在控制台应用程序中使用命令的设计取自 Mark Seeman 的书 Dependency Injection 。网。我的问题是 ICommand 类的一个实现需要一个 IDocumentService 实例。现在为了确保我可以满足对 ICommand 的依赖,我正在使用构造函数注入将 IDocumentService 传递给 Parser。这对我来说似乎很奇怪,因为我认为如果一个类具有依赖项,它应该使用该依赖项,而不仅仅是将其传递给依赖项。同时,我认为如果我构建一个抽象的 IDocumentServiceFactory 以便 Parser 类可以在文档根之后解析 IDocumentService,那将是矫枉过正。感谢任何解决此设计问题的指导。
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]);
}
}