我想使用 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);
}
}
你不应该调用
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()
在任何地方获取命令行参数)。