我的大脑现在到处都是试图完全理解 Unity。所以我决定深入研究并开始将它添加到一个分支中,看看它会把我带到哪里。令人惊讶的是(或者可能不是),我只是让我该死的应用程序正确加载。
似乎正确的方法是覆盖 App.cs 中的 OnStartup。我已从 App.xaml 中删除了我的 StartupUri,因此它不会创建我的 GUI XAML。我的 App.cs 现在看起来像这样:
public partial class App : Application
{
private IUnityContainer container { get; set; }
protected override void OnStartup(StartupEventArgs e)
{
container = new UnityContainer();
GUI gui = new GUI();
gui.Show();
}
protected override void OnExit(ExitEventArgs e)
{
container.Dispose();
base.OnExit(e);
}
}
问题是当我启动应用程序时没有任何 react !我在
container
处放置了一个断点分配,它永远不会被击中。我错过了什么? App.xaml 当前设置为 ApplicationDefinition,但我希望它可以工作,因为我正在查看的一些示例 Unity + WPF 代码 ( from Codeplex ) 执行完全相同的操作,只是它可以工作!
我还通过单步启动了该应用程序,它最终到达了 App.xaml 中的第一行。当我进入这一行时,应用程序刚刚开始“运行”,但我什么也没看到(而且我的断点没有被击中)。如果我在示例应用程序中做完全相同的事情,进入 App.xaml 会让我直接进入 OnStartup,这正是我期望发生的。啊!
我还刚刚从头开始创建了一个新的 WPF 应用程序,删除了 StartupUri,覆盖了 OnStartup(),它也可以工作。什么?
将 Unity 构造放在我的 GUI 的 Window_Loaded 事件处理程序中是一件坏事吗?真的需要在App层面吗?
最佳答案
仔细检查 App.xaml 中的 x:Class 是否与 App.xaml.cs 中的 namespace /类相同。从另一个项目复制/粘贴很容易忘记修改它。
如果由于任何原因您无法解决此问题,请删除 App.xaml 并添加 Main()
这是一个 new App().Run()
.如果这也不起作用,那么这里真的很奇怪。
关于WPF应用启动问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2874920/