예를 들어, WPF 응용 프로그램을 만들고 로깅, 처리되지 않은 예외 처리 등과 같이 각 응용 프로그램에서 사용하는 일부 논리를 추가하려고합니다.이 코드를 사용합니다 (실제 코드는 사용하지 않습니다. 단지 코드 만 사용하십시오). 그건 내 예를 들어 WPF 응용 프로그램에서 뭔가를) 수행합니다App 클래스의 기본 코드를 만드는 방법은 무엇입니까?
public partial class App : Application
{
protected override void OnStartup(StartupEventArgs e)
{
AppDomain.CurrentDomain.UnhandledException
+= new UnhandledExceptionEventHandler(UnhandledExceptionHandler);
ServiceInjector.InjectServices();
base.OnStartup(e);
MainWindow window = new MainWindow();
window.Show();
}
void UnhandledExceptionHandler(object sender, UnhandledExceptionEventArgs args)
{
var exceptionObj = args.ExceptionObject as Exception;
if (exceptionObj == null)
exceptionObj = new NotSupportedException(
"Unhandled exception doesn't derive from System.Exception: "
+ args.ExceptionObject.ToString());
// TODO: Logging...
var messageBox = GetService<IMessageBoxService>();
messageBox.Show(
exceptionObj.Message,
"Unhandled exception.",
MessageBoxButton.OK,
MessageBoxImage.Exclamation);
Environment.Exit(1);
}
#region Resolve service dependencies members.
public TServiceContract GetService<TServiceContract>()
where TServiceContract : class
{
return ServiceContainer.Instance.GetService<TServiceContract>();
}
#endregion Resolve service dependencies members.
}
내가, OnStartup (UnhandledException의 구독 내부의 코드를 사용하여 주입 서비스를 원하는)를 UnhandledExceptionHandler 자체와 손에 의해 복사 붙여 넣기를하지 않고 내 모든 WPF 애플리케이션에서의 getService 방법 . 가장 좋은 방법은 무엇입니까?
App (파생 된 응용 프로그램)에 대한 기본 클래스에 대해 조금 읽었지만 XAML을 지원하는 App.gics 파일 (App 클래스 선언의 일부)과 같은 많은 단점이있는 것으로 보입니다 Fluent의 구성 요소가 App.xaml의 ResourceDictionary를 통해 참조를 추가하지 않고서는 작동하지 않기 때문에 App.xaml을 가짐)
바퀴를 다시 열면 결과에 매우 고통스러운 모서리가됩니다. try/catch 및 writeng 파일 작업 방법을 배우고 난 후에 언급 한 교차 절단 문제는 일반적으로 기존의 권장 라이브러리와 함께 제공되는 기존 라이브러리 사용을 고려하십시오. 다양한 유형의 응용 프로그램으로 배선하는 방법. –
나는 @AlexeiLevenkov와 동의하지만, 때로는 쉬운 방법이 왜 있는지를 배우는 것뿐만 아니라 왜 그런 공통점을 어떻게 더 잘 이해할 수 있는지에 따라 학습 곡선이 어려운 것을 먼저하는 것이 좋습니다. 도서관이 작동합니다. – jleach
제 경우에 당신이 의미하는 것이 무엇인지 이해하지 못합니다. 저는 이미 공용 라이브러리를 사용합니다. 예를 들어 NLog는 로깅 용입니다. 내 질문의 요점은 다른 영역에 놓여 있습니다. 공통된 코드가 있습니다 - 응용 프로그램 유형에 최소한의 적응과 최소한의 노력으로 모든 새로운 응용 프로그램을 어떻게 가져올 수 있습니까? 간단한 경우 기본 클래스를 사용할 수 있습니다. 하지만 WPF 응용 프로그램의 경우에는 그렇게 간단하지 않습니다. 표준 "WPF 응용 프로그램"템플릿은 부분적인 App 클래스와 미리 정의 된 설정 중 일부를 만듭니다. 따라서 기본 클래스와 다른 기능을 다시 만들어야합니다. 그리고 나는 그것을 어떻게 벗어날 수 있는지 묻습니다. – Alex34758