2

我们有一个支持“批处理模式”的应用程序。所以我们想让它可以从控制台调用,就像 devenv.exe 一样。

该应用程序具有 WPF 用户界面,这是大多数用户的默认界面。我们将 caliburn.micro 与主窗口的引导程序一起使用。

认为我们应该为此设置一个不同的引导程序。(或者根本没有引导程序)

  1. 我们如何“选择”环境是什么?
  2. 在引导程序开始工作之前有什么办法可以做吗?
4

1 回答 1

3

如果我正确理解了您的问题,那么您想在控制台模式(来自 CMD)或带有 WPF 界面的 UI 模式下运行应用程序,对吗?

认为我们应该为此设置一个不同的引导程序。(或者根本没有引导程序)

您可以保留引导程序,但您可能需要对其进行一些修改,使其看起来像这样:

public class AppBootstrapper : BootstrapperBase
{

     public AppBootstrapper()
     {
         Start(); // THIS IS WHAT CAUSES THE FRAMEWORK TO INITIALIZE
     }

     protected override void Configure()
     {  
         // DIFFERENT CONFIGURATION GOES HERE
     }

     protected override object GetInstance(Type service, string key)
     {
         // DI CONTAINER RELATED CONFIGURATION
     }

     protected override IEnumerable<object> GetAllInstances(Type service)
     {
         // DI CONTAINER RELATED CONFIGURATION
     }

     protected override void BuildUp(object instance)
     {
         // DI CONTAINER RELATED CONFIGURATION
     }

     protected override void OnStartup(object sender, System.Windows.StartupEventArgs e)
     {
         // ANY CUSTOM BEFORE-START CUSTOMIZATION OR PROCESSING CAN TAKE PLACE HERE
         DisplayRootViewFor<SPECIFIY_ROOT_VIEW_MODEL_HERE>(); // THIS IS WHAT DISPLAYS THE MAIN WINDOW, IF YOU DON'T CALL THIS NO UI WILL BE SHOWN
     }
}

我们如何“选择”环境是什么?

OnStartup()上面显示的引导程序中和DisplayRootViewFor调用之前的覆盖中,您可以通过调用获取命令行参数列表,Environment.GetCommandLineArgs()然后也许您可以要求想要在批处理模式下工作的用户指定一个参数,并基于此您可以或无法调用DisplayRootViewFor以显示主窗口。

在引导程序开始工作之前有什么办法可以做吗?

是的,您OnStartup()最好在方法中这样做,或者如果您希望在Configure()方法中这样做。

注意:除非您在构造函数中调用,否则两者Configure()OnStartup()不会被调用。Start()

于 2013-07-30T09:13:40.997 回答