我正在为.Net Core编写控制台应用程序,并使用Microsoft.Extensions.DependencyInjection包。
控制台应用程序将在命令行接受开关,这将改变其行为,但每次的意图保持不变:
我考虑做这样的事情:
string actionSwitch = "a"; // this would come from the command line
var serviceCollection = new ServiceCollection();
switch (actionSwitch)
{
case "a": // set up bindings for application mode a
serviceCollection.AddSingleton<IDatabaseReaderService, ReadFromMySqlService>();
serviceCollection.AddSingleton<IReportGeneratorService, HtmlReportGeneratorService>();
serviceCollection.AddSingleton<IReportOutputService, OutputReportToDiskService>();
break;
case "b": // set up bindings for application mode b
serviceCollection.AddSingleton<IDatabaseReaderService, ReadFromXmlFileService>();
serviceCollection.AddSingleton<IReportGeneratorService, PdfReportGeneratorService>();
serviceCollection.AddSingleton<IReportOutputService, OutputReportToFtpService>();
break;
}
serviceCollection.AddSingleton<IReportProcessService, ReportProcessService>();
var serviceProvider = serviceCollection.BuildServiceProvider();
var process = serviceProvider.GetService<IReportProcessService>();
process.Execute();
即。绑定是根据用户在命令行输入的。
最近才开始使用DI,我见过的所有例子都遵循相同的模式:
上述代码是否代表DI的合理使用,或者在启动时使用应用程序逻辑选择绑定是不好的做法?