我正在使用Prism UnityExtensions引導程序類來啓動我的WPF應用程序。 unityextensions引導程序仍在運行時如何關閉應用程序?如何在引導程序類仍在運行時關閉應用程序?
請參閱下面的我的引導程序類。 SomeClass
對象可能會引發自定義異常(致命)。如果自定義異常被拋出,我需要關閉應用程序。我正在使用Application.Current.Shutdown()
來關閉應用程序。
但是,引導程序代碼繼續運行,並且在CreateShell()
方法中設置datacontext時,出現「ResolutionFailedException was unhandled」異常錯誤。顯然,由於catch塊,SomeClass
方法和接口未在容器中註冊。
在呼叫Application.Current.Shutdown()
的調用被調用後,看起來引導程序代碼繼續運行。我需要在關閉調用之後立即停止引導程序代碼。
任何想法如何關閉應用程序而不創建ResolutionFailedException
?
ResolutionFailedException異常的詳細信息 - > 分辨率依賴的失敗,TYPE = 「SomeClass的」,名字= 「(無)」。 發生異常時:解析時。 異常是: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();
}
}
你猜對了!我從OnStartup方法運行引導程序。我沒有意識到OnStartup方法必須在應用程序關閉之前完成運行。我按照你的例子改變了我的代碼,它效果很好。非常感謝您的幫助。 – EnLaCucha 2012-02-13 16:38:34