有没有办法在 Prism WPF 应用程序的 app.xaml.cs 中使用 StartupEventArgs?

问题描述 投票:0回答:1

我想使用 StartupEventArgs 来确定在 C# WPF 棱镜应用程序中使用了哪些应用程序设置 JSON 文件。这可能吗?

我已经覆盖 App.xaml.cs 中的 OnStartup 方法以使用 StartupEventArgs 运行,但正如 Prism 文档所预期的那样,这会导致主窗口打开两次。我在 Prism 文档中找不到任何建议如何做到这一点,任何帮助将不胜感激!

编辑我正在使用的启动方法会导致两个窗口打开

    protected override void OnStartup(StartupEventArgs e)
    {
        string env = null;
        // Check for env in startup args
        for (int i = 0; i < e.Args.Length; i++)
        {
            if (e.Args[i].Equals("-config"))
            {
                _environmentTag = e.Args[i + 1];
                switch (e.Args[i + 1])
                {
                    case "Live":
                        env = "appsettings.json";
                        break;
                    case "Test":
                        env = "appsettings.Development.json";
                        break;
                    default:
                        env = null;
                        break;
                }
            }
            var builder = new ConfigurationBuilder()
                .SetBasePath(Environment.CurrentDirectory)
                .AddJsonFile(env, optional: false, reloadOnChange: false);
            _configuration = builder.Build();

            OnInitialized();
            base.OnStartup(e);
        }
    }
wpf prism
1个回答
0
投票

你不应该调用

OnInitialized
,因为
base.OnStartup
已经这样做了(首先实际初始化)。

protected override void OnStartup(StartupEventArgs e)
{
    string env = null;
    // Check for env in startup args
    for (int i = 0; i < e.Args.Length; i++)
    {
        if (e.Args[i].Equals("-config"))
        {
            _environmentTag = e.Args[i + 1];
            switch (e.Args[i + 1])
            {
                case "Live":
                    env = "appsettings.json";
                    break;
                case "Test":
                    env = "appsettings.Development.json";
                    break;
                default:
                    env = null;
                    break;
            }
        }
        var builder = new ConfigurationBuilder()
            .SetBasePath(Environment.CurrentDirectory)
            .AddJsonFile(env, optional: false, reloadOnChange: false);
        _configuration = builder.Build();

        base.OnStartup(e); // this will initialize everything and then call OnInitialized
    }
}

根据您需要

_configuration
的用途,将代码移动到
CreateContainerExtension
RegisterTypes
可能是个好主意(提醒:您可以通过调用
Environment.GetCommandLineArgs()
在任何地方获取命令行参数)。

© www.soinside.com 2019 - 2024. All rights reserved.