안녕하세요, 내 클래스를 serviceLocator에 등록하고 재사용하려고합니다. 내 코드는 다음과 같습니다.
public ViewModelLocator()
{
ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default);
SimpleIoc.Default.Register<IUnitOfWork, UnitOfWork>(true);
SimpleIoc.Default.Register<MainViewModel>(() =>
{
return new MainViewModel(UnitOfWorkItem);
});
SimpleIoc.Default.Register<LoginViewModel>(() =>
{
return new LoginViewModel(UnitOfWorkItem);
});
}
public UnitOfWork UnitOfWorkItem
{
get
{
return ServiceLocator.Current.GetInstance<UnitOfWork>();
}
}
public MainViewModel Main
{
get
{
return ServiceLocator.Current.GetInstance<MainViewModel>();
}
}
인스턴스 MainViewModel이 다음과 같은 예외를 던지는 함수에 UnitOfWorkItem을 제공하려고 할 때 :
캐시에서 찾을 수없는 유형 : Client.Business.UnitOfWork.
내 스택 추적은 다음과 같습니다.
GalaSoft.MvvmLight.Ioc.SimpleIoc.DoGetService (Type serviceType, String key, Boolean cache) in D : \ GalaSoft \ mydotnet \ MVVMLight \ source \ GalaSoft.MvvmLight \ GalaSoft.MvvmLight.Extras (PCL) \ Ioc \ SimpleIoc.cs : D : \ GalaSoft \ mydotnet \ MVVMLight \ source \ GalaSoft.MvvmLight \ GalaSoft.MvvmLight.Extras (PCL) \ Ioc \ SimpleIoc.cs : riga 912의 GalaSoft.MvvmLight.Ioc.SimpleIoc.GetInstanceTService의 리가 537 PrivateVideoChat.Client .ViewModel.ViewModelLocator.get_UnitOfWorkItem () in C : \ Users \ c.fasolin \ Documents \ Visual Studio 2013 \ Projects \ PrivateVideoChat.Solution \ PrivateVideoChat.Client \ ViewModel \ ViewModelLocator.cs : riga 63 in PrivateVideoChat.Client.ViewModel.ViewModelLocator . <. ctor> b__0_1 () C : \ Users \ c.fasolin \ Documents \ Visual Studio 2013 \ Projects \ PrivateVideoChat.Solution \ PrivateVideoChat.Client \ ViewModel \ ViewModelLocator.cs : riga 52
내가 틀린 곳 감사합니다
UnitOfWorkItem
속성은 등록을 찾고있다 UnitOfWork
. 하지만 해당 클래스에 아무것도 등록하지 않고 IUnitOfWork
!
당신은 당신의 문제를 해결해야하는 UnitOfWorkItem
변경 UnitOfWork
에 IUnitOfWork
:
public UnitOfWork UnitOfWorkItem
{
get
{
return ServiceLocator.Current.GetInstance<IUnitOfWork>();
}
}
더 나은 :
참고로 IoC 컨테이너의 힘은 등록을 연결할 수 있다는 것입니다. 예를 들어, 귀하 LoginViewModel
와 귀하의 MainViewModel
경우 UnitOfWork
생성자 매개 변수가 필요합니다 .
당신은 모두 등록하면 UnitOfWork
, MainViewModel
와 LoginViewModel
같은를 :
SimpleIoc.Default.Register<UnitOfWork>();
SimpleIoc.Default.Register<LoginViewModel>();
SimpleIoc.Default.Register<MainViewModel>();
컨테이너는 ViewModels
등록 된 생성자 등 을 자동으로 제공합니다 UnitOfWork
.
이렇게하면 LoginViewModel 생성자에 제공하기 위해 UnitOfWork를 가져 오는 속성을 만들 필요가 없습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다