我们有一个支持“批处理模式”的应用程序。所以我们想让它可以从控制台调用,就像 devenv.exe 一样。
该应用程序具有 WPF 用户界面,这是大多数用户的默认界面。我们将 caliburn.micro 与主窗口的引导程序一起使用。
认为我们应该为此设置一个不同的引导程序。(或者根本没有引导程序)
- 我们如何“选择”环境是什么?
- 在引导程序开始工作之前有什么办法可以做吗?
我们有一个支持“批处理模式”的应用程序。所以我们想让它可以从控制台调用,就像 devenv.exe 一样。
该应用程序具有 WPF 用户界面,这是大多数用户的默认界面。我们将 caliburn.micro 与主窗口的引导程序一起使用。
认为我们应该为此设置一个不同的引导程序。(或者根本没有引导程序)
如果我正确理解了您的问题,那么您想在控制台模式(来自 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()