私はWPFアプリケーションを起動するためにPrism UnityExtensionsブートストラップクラスを使用しています。 unityextensionsブートストラップが実行されている間にアプリケーションをシャットダウンするにはどうすればよいですか?bootstrapperクラスの実行中にアプリケーションをシャットダウンする方法はありますか?
下記の私のbootstrapperクラスを参照してください。 SomeClass
オブジェクトは、カスタム例外(致命的)をスローする可能性があります。カスタム例外がスローされた場合は、アプリケーションを終了する必要があります。私はApplication.Current.Shutdown()
を使用してアプリケーションをシャットダウンしています。
しかし、CreateShell()
メソッドでdatacontextを設定すると、ブートストラップコードが実行され続け、 "ResolutionFailedException was unhandled"例外エラーが発生します。明らかに、SomeClass
メソッドとインターフェイスは、キャッチブロックのためにコンテナに登録されていませんでした。
Application.Current.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();
}
}
あなたはそれを得ました!私は、OnStartupメソッドからブートストラップを実行します。私はOnStartupメソッドがアプリケーションがシャットダウンする前に実行を終了しなければならないことに気づいていませんでした。私はあなたの例に従って自分のコードを変更し、それは素晴らしい作品です。あなたの助けをありがとう。 – EnLaCucha