用户控件中的 Mvvm light SimpleIoC

Mvvm light SimpleIoC in usercontrol

我希望有人可以阐明我的用例的最佳实践。

我在 wpf 用户控件中使用 mvvm light 和 simpleIoC 容器。我注册我的模型并向其查看模型、数据服务和设计时服务(非常根据 mvvm light 示例代码)

我看到的 SimpleIoC 容器使用示例似乎总是将容器视为 GalaSoft 名称空间的静态/全局。

但是如果我要在同一个应用程序中创建我的 WPF 控件的两个实例,我当然希望每个用户控件都有自己的一组 VM 和模型实例。所以基本上它自己的一组 SimpleIoC 注册实例。当默认的 IoC 容器似乎是一个静态对象时,我该如何最好地完成它?

这就是工厂模式旨在解决的问题,您创建一个 class 来创建您的控制视图模型,然后注入它。

关注点分离也更好。

How would I best accomplish that when the default IoC container seems to be a static object?

不要使用默认容器,而是创建自己的 SimpleIoc class:

实例

用户控件 A:

SimpleIoc containerA = new SimpleIoc();
containerA.Register<ViewModel>();
...
ViewModel vm = containerA.GetInstance<ViewModel46>();

用户控件 B:

SimpleIoc containerB = new SimpleIoc();
...

当您获取实例时,您可以选择提供一个密钥。尽管默认情况下每种类型都有一个单例,但这会为每个键生成该类型的另一个缓存版本。这意味着您可以使用 guid 或其他东西作为您需要的每个实例的键。

但是有一个潜在的问题。如果您获得 100 个不同版本的实例,那么它们将在您的应用程序的整个生命周期内全部存储在内存中。

如果这只是少数情况,您可能没问题。

再多一点,您可能最好使用更复杂的 di 容器。 SimpleIoC 仅适用于简单的用例。

但是,您可以在获取实例时使用工厂方法。这不合我的口味,但如果你真的想使用 simpleioc,那是值得考虑的事情。

您可以在此处阅读 laurent bugnion 的更多信息。

https://msdn.microsoft.com/en-us/magazine/jj991965.aspx