使用MVVM Light Toolkit(galasoft)注入存根

时间:2015-02-23 16:07:28

标签: c# dependency-injection mvvm-toolkit

我使用Galasoft MVVM Toolkit和ServiceLocator来管理我的应用程序中的服务。 我想管理两种不同的服务实现。应该在调试/设计模式下注入存根实现,并且在其他情况下应该注入实际实现。 伪代码可以是:

public TmepServiceLocator(){
    ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default);

    //If DEBUG/DESIGN MODE
    //SimpleIoc.Default.Register<IMyService>(() => new MyServiceStub());
    //ELSE
    SimpleIoc.Default.Register<IMyService>(() => new MyServiceImpl());
}
public IMyService MyService{
    get{return ServiceLocator.Current.GetInstance<IMyService>();}
}

我该怎么办?
在开发时(并且不使用Spring),您是否有解决方法来使用服务存根?

1 个答案:

答案 0 :(得分:0)

在MVVM Light中,您通常使用ViewModelLocator类型的对象进行依赖注入。

您可以使用静态方法ViewModelBase.IsInDesignModeStatic。

if (ViewModelBase.IsInDesignModeStatic)
{
  SimpleIoc.Default.Register<IMyService, StubServiceImplementation>();
}
else
{
SimpleIoc.Default.Register<IMyService, RealServiceImplementation>();
}

除此之外你可以使用条件

#if DEBUG
SimpleIoc.Default.Register<IMyService, StubServiceImplementation>();
#else
SimpleIoc.Default.Register<IMyService, RealServiceImplementation>();
#endif