在 MVVMLight 中使用 SimpleIoC 有什么好处?
What is the benefit of using SimpleIoC in MVVMLight?
这是来自 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
class 的情况下实现它。我的问题是 "registering" a class/object 使用 SimpleIoc
class 有什么好处?请给我解释一下。
两者都是依赖注入的例子,但一个使用容器,一个是显式的;有时被称为“穷人的 DI”或 'Pure DI'.
我可能会同意,在这个简单的示例中,显式方法不那么复杂,并且可能是我选择的方法。
您可能会发现 Mark Seeman's blog post 何时使用 DI 容器很有用。
这是来自 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
class 的情况下实现它。我的问题是 "registering" a class/object 使用 SimpleIoc
class 有什么好处?请给我解释一下。
两者都是依赖注入的例子,但一个使用容器,一个是显式的;有时被称为“穷人的 DI”或 'Pure DI'.
我可能会同意,在这个简单的示例中,显式方法不那么复杂,并且可能是我选择的方法。
您可能会发现 Mark Seeman's blog post 何时使用 DI 容器很有用。