用户控件中的Mvvm light SimpleIoC

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用户控件中的Mvvm light SimpleIoC相关的知识,希望对你有一定的参考价值。

我希望有人能够对我的用例的最佳实践有所启发。

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

我见过的SimpleIoC容器用法示例似乎总是将容器视为GalaSoft命名空间的静态/全局。

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

答案

当默认IoC容器似乎是一个静态对象时,我最好如何做到这一点?

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

用户控制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

另一答案

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

更好地分离关注点。

以上是关于用户控件中的Mvvm light SimpleIoC的主要内容,如果未能解决你的问题,请参考以下文章

MVVM Light - 用户控件作为视图

MVVM Light Toolkit 示例 [关闭]

如何滚动到添加到 MVVM Light 列表视图中的新项目

MVVM-light 中的清理与处置(布尔)

C# mvvmlight model数据非自己定义可以绑定吗

MVVM Light,TreeView ItemSsource不更新