인프런 커뮤니티 질문&답변

우아한 거북이님의 프로필 이미지
우아한 거북이

작성한 질문수

[C#/.NET 7.0]어서와, WPF는 처음이지?

뷰에서 유저컨트롤을 태그로 사용할 때 오류 질문드립니다.

해결된 질문

작성

·

128

0

안녕하세요. 강사님.

프로젝트 진행 중 오류를 해결하지 못하는 상황이라 질문드립니다.

[개발 환경]

  1. Visual Studio 2019

  2. .NET 5.0

  3. 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 타입으로 등록되지 않은 경우 발생할 수 있습니다.

해당 오류를 해결하기 위해 다음과 같은 조치 사항을 검토해 보시는 것이 좋습니다:

  1. App.xaml.cs 파일에서 App.Services의 서비스 컨테이너가 올바르게 초기화되고 있는지 확인해 보세요. 서비스 컨테이너 초기화는 보통 앱 시작 시 Startup 이벤트에서 이루어집니다.

  2. ViewModel을 서비스 컨테이너에 올바르게 등록했는지 확인해 보세요. Singleton 또는 Transient로 등록하는 과정에서 ViewModel 타입을 정확히 명시했는지, 누락된 부분이 없는지 점검해야 합니다.

  3. 의존성 주입 과정에서 ViewModel의 생성자에 필요한 인자가 있다면, 이를 올바르게 처리하고 있는지 확인하세요. 필요한 서비스나 매개변수가 서비스 컨테이너에 모두 등록되어 있어야 합니다.

  4. 유저컨트롤이 ViewModel을 필요로 하는 경우, 각 유저컨트롤의 DataContext도 동일한 방법으로 초기화되고 있는지 확인합니다. 유저컨트롤 단위로 각각 DataContext를 설정해 줄 필요가 있을 수 있습니다.

ViewModel의 직접 생성으로 오류가 발생하지 않는다면, 문제는 의존성 주입과 관련된 초기화 부분에 있을 가능성이 큽니다. 그러므로 초기화 및 타입 등록 과정을 세심하게 재검토해 주시면 문제를 해결하실 수 있을 것으로 보입니다.

우아한 거북이님의 프로필 이미지
우아한 거북이

작성한 질문수

질문하기