这是MVVMLight(ViewModelLocator.cs
)默认模板的代码段。为简单起见,我删除了一些部分。
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
类的情况下实现它。我的问题是&#34;使用SimpleIoc
类注册&#34; 类/对象的好处是什么?请解释一下。
答案 0 :(得分:1)
两者都是依赖注入的例子,但是一个使用容器,一个是显式的;有时被称为“穷人的DI”或“纯粹的DI”。
我可能同意在这个简单的例子中,明确的方式不那么复杂,可能就是我选择的。
您可能会发现Mark Seeman's blog post何时使用DI容器。