C# Casting App.Current从辅助窗口返回空值

C# Casting App.Current从辅助窗口返回空值,c#,wpf,app.xaml,C#,Wpf,App.xaml,我有两个WPF应用程序(比如App1和App2),它们分别运行良好。我决定我希望能够从App1实例化并打开App2的主窗口,这样我就可以使用App1作为这两个应用的开始屏幕。为此,我在VisualStudio的App1项目中添加了对App2的引用,并在Using语句中添加了其名称空间。在大多数情况下,除了一件事外,这一切都很好 这两个应用程序都包含一个名为Storeid的公共变量,该变量在App.xaml.cs中声明。我用来访问它的代码如下: Application TheApp

我有两个WPF应用程序(比如App1和App2),它们分别运行良好。我决定我希望能够从App1实例化并打开App2的主窗口,这样我就可以使用App1作为这两个应用的开始屏幕。为此,我在VisualStudio的App1项目中添加了对App2的引用,并在Using语句中添加了其名称空间。在大多数情况下,除了一件事外,这一切都很好

这两个应用程序都包含一个名为Storeid的公共变量,该变量在App.xaml.cs中声明。我用来访问它的代码如下:

        Application TheApp = App.Current;
        App MyApp = TheApp as App;
        _storeid = MyApp.Storeid;
此代码是从App2的主窗口的构造函数调用的

当App2独立运行时,此代码工作正常。但是,当从App1实例化相同的窗口时,它会失败。第一行工作正常,但当它到达第二行时,强制转换返回Null,因此第三行由于Null引用异常而失败


现在,我意识到App.Current在这两种情况下是不同的。我希望它在独立运行时使用App2中的App.Current(以及App的定义),在从App1实例化时使用App.Current和App from App1。两个App.xaml.cs都有Storeid公共变量,因此我希望代码能够正常工作。我只是不明白为什么当我在第二行将App转换为App时,转换会产生一个空值。

可能是因为即使它们的名称相同,App2中的类型App与App1中的类型App也不同。由于正在运行的应用程序是App2,因此您正在尝试将App1的应用程序类型的实例强制转换为App2的应用程序类型。结果为空

也就是说,App2正在尝试将App.Current强制转换为App2的应用类型。但是属性的类型是App1的应用程序类型。我希望这是清楚的


您必须在App2的代码副本中确定哪种应用类型是应用类型。如果是App1的应用类型,则使用与App2的应用类型不同的逻辑来取消对商店ID的引用。

好的,这是有意义的,但我不确定使用什么“不同”逻辑。这两个应用的App都包含Storeid公共变量,所以我想这对我来说并不重要。然而,由于App2并没有真正运行(我只是借用了App1中的主窗口),所以我认为我应该使用App1对App的定义。我如何才能做到这一点,成功地施放它,并使解除引用生效?好的,我已经考虑了一些,我想我看到了发生了什么。App2的主窗口无法强制转换为App1的应用程序类型,因为它对该类型一无所知。它成功进行该转换的唯一方法是将其引用为App1.App。当然,这需要从App2添加对App1的引用,这将导致循环引用。啊!我想我必须找到另一种方法来获取Storeid值,比如构造函数注入。感谢您的提示。有一个名为GUID of Type
GUID
Type
类的属性。我相信这个
Guid
唯一地标识了每个类,这就是让您感到困惑的地方。我认为您的逻辑可以只说“如果应用程序对象类型的GUID不同于我的应用程序类类型的GUID,那么它必须是App1对象。”然后您可以使用反射来获取其他类型的存储Id。无需循环引用。