Мой мозг является разнообразной попыткой полностью понять Единицу прямо сейчас. Таким образом, я решил просто погрузиться в и начать добавлять его в ответвлении для наблюдения, где это берет меня. Удивительно достаточно (или возможно не), я застреваю, просто заставив мое проклятое Приложение загрузиться правильно.
Это походит на правильный способ сделать, что это должно переопределить OnStartup в App.cs. Я удалил свой StartupUri из App.xaml, таким образом, он не создает мой XAML GUI. Мой 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, но я ожидал бы, что это будет работать, потому что некоторая демонстрационная Единица + WPF кодируют, я смотрю на (от Codeplex), делает ту же самую вещь, за исключением того, что это работает!
Я также запустил приложение единственным продвижением, и оно в конечном счете поражает первую строку в App.xaml. Когда я ступаю в эту строку, именно тогда приложение только начинает "работать", но я ничего не вижу (и моя точка останова не поражена). Если я делаю та же самая вещь в примере приложения, ступающем в App.xaml, исправляет меня в OnStartup, который является тем, что я ожидал бы происходить. Argh!
Я также только что создал новое приложение WPF с нуля, удалил StartupUri, переопределил OnStartup (), и это также работает. WTH?
Действительно ли это - Плохая Вещь просто поместить конструкцию Единицы в обработчик событий моего GUI Window_Loaded? Это должно действительно быть на уровне Приложения?
Дважды проверьте, что x:Class в App.xaml в том же пространстве имен/классе, что и в вашем App.xaml.cs. Легко скопировать/вставить из другого проекта и забыть изменить это.
Если по какой-то причине вам не удается решить эту проблему, удалите App.xaml и добавьте Main()
, который выполняет new App().Run()
. Если и это не сработает, значит, здесь что-то очень странное.
Кажется, ваша проблема вообще не связана с Unity ... Убедитесь, что:
YourProject.App
( на странице свойств проекта) В противном случае я не вижу причины, по которой это не должно работать ...
Обновление: просто еще одно идея ... Попробуйте установить StartupUri
обратно в App.xaml и вызовите базовую реализацию в OnStartup
:
protected override void OnStartup(StartupEventArgs e)
{
container = new UnityContainer();
base.OnStartup(e);
}