首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从MVVM客户端应用反转控制使用

从MVVM客户端应用反转控制使用
EN

Stack Overflow用户
提问于 2012-03-10 05:30:27
回答 1查看 370关注 0票数 0

因此,我正在启动一个新的企业项目,并希望从使用IoC容器开始。到目前为止,该项目由一个MVVM客户端和4个其他程序集(CRM、ReportManager、安全管理器和存储库管理器程序集)组成。

MVVM客户端界面基于Shell和一系列用户控件(在选项卡中加载)。在这些用户控件中,我需要实例化和调用一个或多个其他程序集,这就是我的问题。

考虑到每次我需要使用它们时初始化程序集是相当重复的,而且(正如我在这里所读到的)使用单例并不是一个好主意。如果我使用IoC容器(我正在考虑Windsor)也没问题,如果是的话,我需要如何管理容器实例本身呢?我是否需要创建一个singleton容器实例,或者只是在另一个类(MainView)上初始化容器,以保证我能够从另一个类使用它注册的组件?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-03-10 05:42:39

您不应该在应用程序中传递对容器的引用。Don't call the container; it'll call you

您需要引用容器的唯一位置是在composition root (应用程序被引导的位置)和任何工厂实现中。

Castle Windsor支持typed factories,因此即使您的工厂也可以自动连接以使用您的容器。

更新

您说您有一个shell,它有一系列选项卡,每个选项卡显示一个UserControl。

如果您使用的是MVVM,那么您将拥有视图模型和视图,并且假设这些UserControls中的每一个实际上都是一个绑定到底层视图模型的视图。

如果您正在使用视图模型优先方法(您可能应该这样做),那么视图模型所需的服务(例如,报表管理器、安全管理器等)应该通过其构造函数(作为已在容器中针对具体实现注册的抽象)注入到视图模型中。

在解析shell视图模型时(在组合根中),容器将自动注入shell视图模型所需的服务,因为它具有依赖链支持。这些外壳依赖关系还可能包括每个选项卡的视图模型。

当您需要进一步实例化视图模型时,父视图模型可以依赖于工厂类型,工厂类型返回这个新视图模型的一个实例。这些工厂类型将需要对容器的引用,但正如我前面提到的,在Castle Windsor (和其他IoC容器)的情况下,支持创建通过容器隐式解析的工厂类型。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9641268

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档