我们有一个应该支持“批处理模式”的应用程序。 所以我们想让它从控制台调用,就像devenv.exe一样。
该应用程序具有WPF用户界面,这是大多数用户的默认界面。 我们使用caliburn.micro和主窗口的引导程序。
认为我们应该有一个不同的引导程序。 (或根本没有引导程序)
答案 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()
。