在启动时根据输入切换依赖注入绑定 - 好的还是坏的做法?

时间:2017-05-06 22:18:35

标签: c# dependency-injection console-application .net-core

我正在为.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,我见过的所有例子都遵循相同的模式:

  1. 在Startup或Initialisation类中声明绑定。
  2. 之后永远不管它们。
  3. 上述代码是否代表DI的合理使用,或者在启动时使用应用程序逻辑选择绑定是不好的做法?

0 个答案:

没有答案