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