用户控件中的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的主要内容,如果未能解决你的问题,请参考以下文章