Мой мозг по всей карте сейчас пытается полностью понять Единство. Поэтому я решил просто погрузиться и начать добавлять его в ветку, чтобы посмотреть, куда он меня приведет. Как ни странно (а может и нет), я застрял, просто пытаясь загрузить свое чертово приложение.
Кажется, что правильный способ сделать это - переопределить OnStartup в App.cs. Я удалил свой StartupUri из App.xaml, чтобы он не создавал мой графический интерфейс 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. Когда я вхожу в эту строку, тогда приложение просто начинает работать, но я ничего не вижу (и моя точка останова не достигнута). Если я сделаю то же самое в примере приложения, то, войдя в App.xaml, вы попадете прямо в OnStartup, что я и ожидал. Argh!
Я также только что создал новое приложение WPF с нуля, удалил StartupUri, переопределил OnStartup (), и это также работает. WTH?
Плохо ли просто помещать конструкцию Unity в обработчик событий Window_Loaded моего графического интерфейса? Действительно ли должно быть на уровне приложения?