【发布时间】:2012-02-08 09:35:23
【问题描述】:
据我了解,要进行一次解析调用,所有实体必须通过它们的依赖关系“链接在一起”。在解析根实体时,DI 容器将递归地创建其余部分。 在我为 Prism 看到的示例中,Shell 窗口没有明确的依赖关系,因此当它在引导程序的 CreateShell 中解决时,它都停在那里。因为这个模块必须在 InitializeModules 方法中显式解析。
同样,将视图插入外壳通常通过在模块 Initialize 方法中解析它们并显式将它们设置到给定区域来完成,因此更多地将 DI 容器用作服务定位器。
有人知道如何将事物联系在一起以在 Prism 中实现单一解决方案吗?
【问题讨论】:
-
因为在引导程序中你链接了你的模块并将它们添加到你的模块目录中,shell 将创建该模块的一个新实例。因此,您可以在模块类中创建一个构造函数,并添加一个引用您的 DI 容器的接口参数。然后,使用从构造函数获得的 DI 容器的引用,在 Module 类的 Initialize 方法中初始化所有视图和内容
-
我看到它在模块中分发视图、服务等注册的方式是可以的,因为它是在与核心实体的注册“相同的上下文”中完成的。为此,您需要 DI 容器。但是保持对 DI 容器的引用以便以后能够在 Initialize 方法中多次调用解析,这对我来说是服务定位器模式。理想情况下,为了避免这种情况,您应该在解决方案中找到的唯一解析调用应该是对象图根(Shell 或类似的东西)。
标签: c# dependency-injection prism