안녕하세요 성태님 책만 2권을 보유한 학생입니다.ㅎ
인터넷에 찾아 봤는데도 확실하게 답을 못찾아서 글을 올리게 되었습니다.
먼저 MS 공식 라이브러리로 나온 Dependency Injection를 사용해서
여러 ViewModel들 및 각각의 ViewModel에 생성자 주입으로 들어가는
1개의 Service객체를 모두 AddSingleton메서드로 등록한 상태입니다.
그리고 그 Service가 하는 일은
각 ViewModel들끼리 Data를 교환하기 위해 Action으로 델리게이트를 만들어 놓고,
각 ViewModel들이 그 델리게이트를 구독해서
Data를 받는 간단한 프로그램입니다.
여기서 고민이 생겼는데요.
프로그램이 종료 되기전에 Service객체의 Actioin 델리게이트를
각각의 ViewModel들이 +=를 사용해서 등록한 메서드를
-=를 사용해서 명시적으로 해지를 해줘야 하는지가 궁금합니다.
당연히 해줘야 할것 같은데...
질문1)
마소 DI관련글들을 찾아보면,
오히여 DI에 싱글톤으로 등록된 객체는 자동으로 폐기한다고 적어놔서요.
인의적으로 Dispose를 호출하는것을 꺼리는듯한 뉘앙스의 글들만 봤습니다.
DI에 싱글톤으로 동록한 객체에 이벤트를 등록 후 나중에 명시적으로 사용자가 해지를 해줘야 하는건가요?
질문2) 명시적으로 델리게이트에 등록한 메서드들을 풀어줘야 한다면
DI에 등록된 객체의 이벤트 해지는 어떻게 풀 수 있는지도 궁금합니다.
참고로 ViewModel에 IDisposable를 상속받아서 Dispose 메서드안에 구독한 델리게이트를 해지하는
'-=' 코드를 넣어봤지만 프로그램이 종료가 되도 호출되지 않는다는것을 확인했습니다.
(BreakPoint를 걸어놨는데 안걸리고 그냥 프로그램이 종료되서요)
마소의 DI에 등록된 객체는 자동 폐기를 한다는 말을,
믿고 이벤트 해지는 안해도 되는건지? 아니면 명시적으로 해줘야 한다면 disposable 말고
프로그램 종료 이벤트를 재정의해서 해지를 해줘야 하는건지? 정말 궁금합니다.
[최초 등록일: ]
[최종 수정일: 1/25/2023]