Prism UnityExtensions ブートストラップ クラスを使用して WPF アプリケーションを開始しています。unityextensions ブートストラップがまだ実行されている間にアプリケーションをシャットダウンするにはどうすればよいですか?
以下のブートストラップ クラスを参照してください。SomeClass
オブジェクトは、カスタム例外 (致命的) をスローする場合があります。カスタム例外がスローされた場合は、アプリケーションを閉じる必要があります。Application.Current.Shutdown()
アプリケーションをシャットダウンするため に使用しています。
ただし、ブートストラップ コードは引き続き実行され、メソッドで datacontext を設定すると、「ResolutionFailedException was unhandled」という例外エラーが発生しますCreateShell()
。明らかにSomeClass
、catch ブロックが原因で、メソッドとインターフェイスはコンテナーに登録されませんでした。
への呼び出しが呼び出された後も、ブートストラップ コードが引き続き実行されているようApplication.Current.Shutdown()
です。シャットダウンの呼び出しの直後にブートストラップ コードを停止する必要があります。
を作成せずにアプリケーションをシャットダウンする方法はありResolutionFailedException
ますか?
ResolutionFailedException 例外の詳細 --> 依存関係の解決に失敗しました。タイプ = "SomeClass"、名前 = "(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();
}
}