我现在头脑混乱,试图完全理解Unity。所以我决定直接跳进去,在一个分支中开始添加它,看看会带我去哪里。令人惊讶的是(或许不是),我现在卡在了让我的Application正确加载上。
看起来这样做的正确方式是在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);
}
}
问题在于当我启动应用程序时什么都没有发生!我在
container
分配处设置了断点,但它从未被命中。我错过了什么?App.xaml当前设置为ApplicationDefinition,但我期望这能够正常工作,因为我正在查看一些Unity + WPF示例代码(来自Codeplex),它们做的事情完全相同,只是它们可以工作!
我还通过单步执行启动了应用程序,它最终会命中App.xaml的第一行。当我进入此行时,应用程序就开始“运行”,但我看不到任何东西(我的断点也没有命中)。如果我在示例应用程序中做完全相同的事情,则会将我放入OnStartup中,这就是我期望发生的事情。啊!
我还刚刚从头开始创建了一个新的WPF应用程序,删除了StartupUri,重写了OnStartup(),它也可以工作。到底怎么回事?
将Unity构造放入GUI的Window_Loaded事件处理程序中是否有问题?它是否真的需要在App级别上?