如何为控制台和wpf提供校准的应用程序?

时间:2013-07-30 07:37:51

标签: c# wpf console caliburn.micro

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

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

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

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

1 个答案:

答案 0 :(得分: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()