wpf mvvm entitiy Framework 의존성 주입

  • 무엇을 하고자 하는지
    디비1에 있는 내용을 리스트뷰로 보여고 그 값을 디비2에 입력하는 wpf 앱입니다.
    개별 아이템 crud는 필요 없습니다.
    버튼 으로 db 가져오기 db 추가 하기

  • 현재 작성한 코드 중 문제가 되는 부분
    mvvm으로 구조입니다.
    내장 ioc 컨테이너를 통해 뷰모델에서 dbcontext를 의존성 주입 받고 db 작업을 하려고 했는데
    의존성 주입 services.AddSingleton<>은 이렇게
    xml에
    <Window.DataContext>
    <ViewModel:MainViewModel />
    </Window.DataContext>
    이렇게 하니
    이런 오류발생 No service for type ‘WpfApp4.MainWindow’ has been registered.
    아마도
    MainViewModel 입력파라 미터가 없어서 그러는 듯…

  • 기대하는 동작

  1. MainViewModel 생성시 의존성 주입받기
  2. 전체적인 구조 자체가 잘못됐다면 구조 다시 잡아주세요
1개의 좋아요

뷰모델에 dbcontext를 의존성 주입 하기 위해
IoC에 등록해 놓으셨을텐데
View에서 수동으로 MainViewModel 객체를 생성해서 DataContext로 설정해서 나는 문제 아닌가요?

2개의 좋아요

답변감사합니다.
mvvm MainViewModel 객체 생성 방법을 2가지 밖에 모르는데 다른 방법 어떤게 있을까요?

  1. 비하인드 코드랑 this.DataContext = new MainViewModel();
    2…xaml에
    <Window.DataContext>
    ViewModel:MainViewModel/
    </Window.DataContext>
1개의 좋아요

뭐 심플하게는
IoC 로 관리되는 뷰모델을 결정할 수 있는 로케이터 같은걸 만들어서
그것을 이용해 사용할 수 있습니다.

DataContext="{Binding MainViewModel, Source={StaticResource ViewModelLocator}}"

로케이터에서는 수동으로 뷰모델을 생성하는 것이 아닌

이렇게 등록된 객체를 이용해 인스턴스를 만드는 것입니다.

이 외에도 방법은 여러가지 있는데 뷰모델을 어떻게 컨트롤 하는지 간단한 샘플 프로젝트 한번 참고해보세요.

tyeom/WPFMusic: WPF music player (github.com)

2개의 좋아요

답변감사합니다.

1개의 좋아요