Я использую класс начальной загрузки Prism UnityExtensions для запуска моего приложения WPF.Как закрыть приложение, пока загрузчик unityextensions все еще работает?
См. Мой класс загрузчика ниже.Объект SomeClass
может выдавать пользовательское исключение (фатально).Если выброшено пользовательское исключение, мне нужно закрыть приложение.Я использую Application.Current.Shutdown()
, чтобы закрыть приложение.
Однако код загрузчика продолжает выполняться, и я получаю ошибку исключения «ResolutionFailedException is unhandled» при установке контекста данных в методе CreateShell()
.Очевидно, что метод и интерфейс SomeClass
не были зарегистрированы в контейнере из-за блока catch.
Похоже, что код загрузчика продолжает выполняться после вызова Application.Current.Shutdown()
.Мне нужно остановить загрузочный код сразу после вызова shutdown.
Любые идеи, как закрыть приложение без создания ResolutionFailedException
?
ResolutionFailedException Подробности исключения -> Разрешениесбой зависимости, type = "SomeClass", name = "(none)".Исключение произошло во время: при разрешении.Исключение: InvalidOperationException - Текущий тип, SomeClass, является интерфейсом и не может быть создан.Вам не хватает отображения типов?
public class AgentBootstrapper : UnityBootstrapper
{
protected override void ConfigureContainer()
{
base.ConfigureContainer();
var eventRepository = new EventRepository();
Container.RegisterInstance(typeof(IEventRepository), eventRepository);
var dialog = new DialogService();
Container.RegisterInstance(typeof(IDialogService), dialog);
try
{
var someClass = new SomeClass();
Container.RegisterInstance(typeof(ISomeClass), SomeClass);
}
catch (ConfigurationErrorsException e)
{
dialog.ShowException(e.Message + " Application shutting down.");
**Application.Current.Shutdown();**
}
}
protected override System.Windows.DependencyObject CreateShell()
{
var main = new MainWindow
{
DataContext = new MainWindowViewModel(Container.Resolve<IEventRepository>(),
Container.Resolve<IDialogService>(),
Container.Resolve<ISomeClass>())
};
return main;
}
protected override void InitializeShell()
{
base.InitializeShell();
Application.Current.MainWindow = (Window)Shell;
Application.Current.MainWindow.Show();
}
}