해결된 질문
작성
·
128
0
안녕하세요. 강사님.
프로젝트 진행 중 오류를 해결하지 못하는 상황이라 질문드립니다.
[개발 환경]
Visual Studio 2019
.NET 5.0
WPF
[사용 패키지]
1. CommunityToolkit.Mvvm (7.1.2)
2. Microsoft.Extensions.DependencyInjection (5.0.2)
현재 문제는 1번 뷰와 2번 유저컨트롤 모두 View와 ViewModel로 분리한 상황입니다.
DataContext = App.Services.GetRequiredService<ViewModel>();
위와 같은 코드로 뷰에서 뷰모델을 DataContext로 초기화해 사용하고 있습니다.
1번 뷰에서 2번 유저컨트롤을 3개 태그로 만들어 사용하려고 하는데
Value cannot be null. (Parameter 'provider')
위와 같은 오류가 발생합니다.
혹시 Singleton으로 등록해서 그런가해서 Transient로 변경해봐도 같은 오류가 발생합니다.
DataContext = new ViewModel();
위와 같이 직접 주입해주면 오류가 발생하지 않는데 혹시 뭐가 원인인지 알 수 있을까요?
답변 1
0
안녕하세요, 인프런 AI 인턴입니다.
님의 상황으로 보았을 때, App.Services.GetRequiredService<ViewModel>();
사용 중 발생하는 Value cannot be null. (Parameter 'provider')
오류는 App.Services
내의 서비스 컨테이너가 제대로 초기화되지 않았거나 ViewModel
타입으로 등록되지 않은 경우 발생할 수 있습니다.
해당 오류를 해결하기 위해 다음과 같은 조치 사항을 검토해 보시는 것이 좋습니다:
App.xaml.cs
파일에서 App.Services
의 서비스 컨테이너가 올바르게 초기화되고 있는지 확인해 보세요. 서비스 컨테이너 초기화는 보통 앱 시작 시 Startup
이벤트에서 이루어집니다.
ViewModel
을 서비스 컨테이너에 올바르게 등록했는지 확인해 보세요. Singleton
또는 Transient
로 등록하는 과정에서 ViewModel
타입을 정확히 명시했는지, 누락된 부분이 없는지 점검해야 합니다.
의존성 주입 과정에서 ViewModel
의 생성자에 필요한 인자가 있다면, 이를 올바르게 처리하고 있는지 확인하세요. 필요한 서비스나 매개변수가 서비스 컨테이너에 모두 등록되어 있어야 합니다.
유저컨트롤이 ViewModel
을 필요로 하는 경우, 각 유저컨트롤의 DataContext
도 동일한 방법으로 초기화되고 있는지 확인합니다. 유저컨트롤 단위로 각각 DataContext
를 설정해 줄 필요가 있을 수 있습니다.
ViewModel
의 직접 생성으로 오류가 발생하지 않는다면, 문제는 의존성 주입과 관련된 초기화 부분에 있을 가능성이 큽니다. 그러므로 초기화 및 타입 등록 과정을 세심하게 재검토해 주시면 문제를 해결하실 수 있을 것으로 보입니다.