これは大したことではなく、アプリケーションも大きくはないと確信していますが、経験を積むために、できる限りどこでもDIを練習しようとしています。私は次のクラスを持っており、コンソールアプリケーションでユーザーが入力したいくつかの引数を解析し、渡された引数に基づいてICommandのインスタンスを返します。コンソールアプリでコマンドを使用する設計は、MarkSeemanの著書であるDependencyInjectionから引用しています。 。ネット。私の問題は、ICommandクラスの1つの実装にIDocumentServiceのインスタンスが必要なことです。今のところ、ICommandへの依存関係を満たすことができることを確認するために、コンストラクターインジェクションを使用してIDocumentServiceをパーサーに渡します。クラスに依存関係がある場合は、依存関係に渡すだけでなく、その依存関係を使用する必要があると思うので、これは奇妙に思えます。同時に、Parserクラスがドキュメントルートよりも後で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]);
}
}