0
这是MVVMLight默认模板(ViewModelLocator.cs
)的代码段。为了简单起见,我删除了一些部分。在MVVMLight中使用SimpleIoC有什么好处?
public class ViewModelLocator
{
static ViewModelLocator()
{
ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default);
if (ViewModelBase.IsInDesignModeStatic)
{
SimpleIoc.Default.Register<IDataService, DesignDataService>();
}
else
{
SimpleIoc.Default.Register<IDataService, DataService>();
}
SimpleIoc.Default.Register<MainViewModel>();
}
public MainViewModel Main
{
get
{
return ServiceLocator.Current.GetInstance<MainViewModel>();
}
}
}
现在,这是我自己的版本,而不使用SimpleIoC
,它是工作相同作为第一个版本(至少在我自己的观察)。
public class ViewModelLocator
{
static ViewModelLocator() { }
public MainViewModel Main
{
get
{
if(ViewModelBase.IsInDesignModeStatic)
return new MainViewModel(new DesignDataService());
else
return new MainViewModel(new DataService());
}
}
}
在我看来,第二个版本是更容易理解,显然更短。当然,在第一个例子中,只创建了MainViewModel的一个实例(它被称为单例模式吧?),但我认为我们仍然可以在不使用SimpleIoC
类的情况下实现它。我的问题是使用SimpleIoc
类“注册”类/对象的好处是什么?请给我解释一下。
5th SOLID priciple。 – Karolis
@KarolisKajėnas不确定你的观点。这两个例子都显示了依赖注入,并且问题被标记为这样。 –
@KarolisKajėnas:我会读一读。这是我第一次听到这个原则。 – someone