MVVM light toolkit을 사용하는 WPF 응용 프로그램이 있다고 가정합니다.MVVM Locator가 등록 된 ViewModel Funcitons을 호출해야합니까?
이 툴킷의 좋은 예는 Locator입니다. SimpleIoC가 포함되어있어 서비스를 등록하고 인터페이스 기반으로 사용할 수 있다는 점이 좋습니다.
때때로 로케이터 생성자가 실제로 커질 수 있습니다. 그것은 단지 예시했다 :
if(SimpleIoc.Default.GetInstance<MainViewModel>().LoadProject())
{
var project = SimpleIoc.Default.GetInstance<MainViewModel>().LoadedProject
SimpleIoc.Default.Register<ConfigService>(new Service(project))
}
일부 로직을 포함 Unfortunatelly 인터페이스를 등록 이외에 - 나는 로케이터 생성자 동안 더 로직이 필요하면 무엇. 어쩌면 내 서비스 아키텍처가 잘못 되었기 때문에 잘못 만들어진 것일 수도 있고 그런 경우 로케이터 사용을 사임해야 할 수도 있지만 DI를 잃어 버릴 수도 있습니다.
또 다른 점은 몇 가지 ViewModels에 Locator.GetInstance에 대한 참조가 있다는 점입니다. Locator.GetInstance는 테스트 가능성을 위해 컨스트럭터를 통해 주입되어야하기 때문에 좋은 사례가 아닙니다.
또 다른 측면은 AvalonDock에서 올바르게 사용하는 것입니다.
AvalonDock은 고정 가능한 도킹 가능한 창과 함께 Visual Studio와 유사한 응용 프로그램을 준비 할 수있게 해주는 훌륭한 고정 가능한 제어 도구입니다.
이 창은 실제로 속성을 통해 AvalonDock에 바인딩 된 다른 ViewModels입니다.
MainViewModel 속성 도구 새로운 도구 = [{ViewModel1, ViewModel2}
있지만 각 뷰 모델을 찾기에 등록되어있다. 도 안전하지 - 내 의견으로는 또 다른 나쁜 예입니다 Locator.GetInstance()
:
그러므로 내가 사용하고
재산권 게터로 MainViewModel에서 그들을 (DRY 위반). Avalon Tool ViewModel1에 필요한 서비스가 아직 등록되지 않았지만 MainViewModel 인스턴스 생성 중에 getter를 통해 호출되는 경우 어떻게됩니까?
불일치가 시작되었습니다. 좋은 습관이 있습니까?
나는 Workspaces (MainViewModel)와 같은 많은 예제를 발견했으나 동시에 매우 유용한 Locator를 사용하지 않았습니다.
의존성 주입 및 인터페이스 구동 덕분에 mme가 내 프로젝트를 테스트 할 수있게 해주는 좋은 도구라고 생각하기 때문에 Locator를 유지하고 싶습니다.
아이디어가 있습니까? 나는 감사 할 것이다.