- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用适用于 Windows 8 的 MVVM Light 第 4 版;它包括 SimpleIOC。在各种示例中,我有时会看到基于 SimpleIoc 请求对象的代码......有时它基于 ServiceLocator......
示例包括:
userToken = SimpleIoc.Default.GetInstance();
mainVM = ServiceLocator.Current.GetInstance();
使用 SimpleIoc.Default.GetInstance 和 ServiceLocator.Current.GetInstance 有什么区别?
如果没有区别,ServiceLocator 是否只是让我可以选择改变我对要使用哪个 IOC 库的想法?如果我对 SimpleIoc 感到满意,ServiceLocator 是否只是提供了一个无关紧要的额外抽象层?或者,ServiceLocator 是否执行了其他一些对我们 IOC 新手来说并不明显的有用魔法?
感谢您的洞察力!
最佳答案
在您的 ViewModelLocator 类中,您可能有以下代码行:
public ViewModelLocator()
{
ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default);
SimpleIoc
实现
IServiceLocator
接口(interface),这意味着
ServiceLocator
调用时将其用作 DI 源。
ServiceLocator
基本上是一个外壳。服务定位器的代码是:
public static class ServiceLocator
{
private static ServiceLocatorProvider currentProvider;
public static IServiceLocator Current
{
get
{
return ServiceLocator.currentProvider();
}
}
public static void SetLocatorProvider(ServiceLocatorProvider newProvider)
{
ServiceLocator.currentProvider = newProvider;
}
}
ServiceLocatorProvider
?它是一个委托(delegate),它返回一个实现
IServiceLocator
的对象.
SimpleIoc
实现
IServiceLocator
.所以当我们这样做时:
ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default);
SimpleIoc
对象进入
ServiceLocator
.您现在可以使用其中任何一个,因为无论您调用
ServiceLocator.Current
或
SimpleIoc.Default
您正在返回相同的对象实例。
userToken = SimpleIoc.Default.GetInstance();
mainVM = ServiceLocator.Current.GetInstance();
IServiceLocator
的实现。 .如上所述,您将返回实现
IServiceLocator
的相同对象实例。不管你叫什么。
ServiceLocator.Current.GetInstance()
的唯一原因而不是
SimpleIoc.Default.GetInstance()
是在将来的某个时候您可能会更改 DI 容器,如果您使用
ServiceLocator
,您不必更改代码。
关于inversion-of-control - SimpleIoc.Default.GetInstance 和 ServiceLocator.Current.GetInstance 之间有区别吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14044551/
我在我的项目中使用带有 MVVM Light 的 WPF。我有一些关于 SimpleIoC 的小问题容器和 DI。哪个是更好的使用方法,或者告诉我是否不需要在那里使用 DI。 有我的VM构造函数: p
如何使用 SimpleIOC 注册通用存储库? public interface IRepository { } public class Repository : IReposito
我需要创建一个 ViewModel 的实例,并在创建时将特定参数传递给 ViewModel。同时这个ViewModel实例应该在SimpleIOC中注册 我认为这是它的方法: SimpleIoc.Re
使用 SimpleIoc 我想注册 IProvider 的多个实现,例如: SimpleIoc.Default.Register(); SimpleIoc.Default.Register(); 所以
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 7 年前。
据我了解,SimpleIoc 使用 GetInstance 方法来检索已注册的类的实例。如果实例不存在,它将创建它。但是,该实例会被缓存并始终被检索,这模仿了单例模式。 我的想法是,如果这个 View
我有一个使用 MVVM Light 的 wpf 应用程序.我有两个类和接口(interface): public interface ICrud{ // } public class CrudDAO
我只需要知道 MVVM Light 的 SimpleIoC 背后是什么?是现有的之一(Unity、CaSTLe Windsor、StructureMap、MEF,也许是 Simple Injector
我想在我的 View 模型定位器类中注册和取消注册我的 View 模型。 我想收集我所有的 View 模型并迭代它们以注册和注销它们。处理注册的方法声明如下: public bool IsRegist
我有一个 LoB WPF 应用程序,需要找到一种方法来全局处理和记录异常。 我知道我在做这样的事情: public partial class App : Application {
我正在使用 MVVM Light 开发一个新项目。我听说你最好不要使用随附的 SimpleIoC,因为有几个限制。但是使用 SimpleIoC 的缺点/限制是什么? 在做出这种选择时使用 Ninjec
我在 Xamarin 项目中使用 mvvm light SimpleIoC 并使用实例键来获取一些 View 模型。 SimpleIoc.Default.GetInstance("contextIde
我刚刚开始使用 mvvm light 工具包中的 SimpleIOC。我只是想知道是否可以选择将参数化构造函数作为 PreferredConstructor? 此功能是否适用于 SimpleIOC?如
我在我当前的 Windows Phone 项目中使用 SterlingDB,我希望能够使用 MVVM Light v4 中的新 SimpleIoC 容器从我的应用程序的各个位置解析 Sterling
使用 MVVM 的 SimpleIoc,我想为给定接口(interface)注册一个实现,但该实现在其构造函数中需要一个参数: public class MyServiceImplementation
我已经开始使用最新的 MVVM Light 工具包 v4(NuGet 预览版 v4.1.21,DLL v:4.0.21.25725),它实现了 SimpleIOC 模式。 在我的 ViewModelL
我正在借助 MVVM Light Toolkit 4.1.24 开发 WPF 应用程序。这是我的 ViewModel Locator 类。 public class ViewModelLocator
我正在使用适用于 Windows 8 的 MVVM Light 第 4 版;它包括 SimpleIOC。在各种示例中,我有时会看到基于 SimpleIoc 请求对象的代码......有时它基于 Ser
在ViewModelLocator的静态构造函数中类 SimpleIoc.Default.Register();在 IsInDesignModeStatic 处失败模式,如果接口(interface)
我是一名优秀的程序员,十分优秀!