Prism和在棱镜中使用Unity IoC

时间:2009-08-28 16:52:14

标签: unity-container prism

我是Prism的新手。我已经从SO和各种博客的问题中了解了很多。我正在使用最新版本 - V2

我想要对你们这些可能相当简单的事情做一些解释,但这只是没有进入我的大脑(小的那个)。 而不是第一次做到这一点,我已经花了两周多时间查看各种博客,网络直播......,我想开始一个项目并学习。这些数百个网站的信息量极大且难以消化。 目前我的项目设置如下 Shell - 菜单模块 - ViewModel - - - >菜单服务 - - >菜单存储库---数据

所有人都在不同的集会中

MyShell --- MenuModule --- MyServices - Myrepository

Shell需要稍后引用模块(以为我确定可以使用字符串添加它)。

ViewModel引用了View - 现在可以使用它

View Model需要使用菜单服务,菜单服务使用存储库

所有都是使用构造函数注入构建的。我现在正在使用模块引用MyService和Myrepository项目,然后在模块级别注册类型。 但这感觉并不好。我不想硬引用任何项目。如果我们引用项目,为什么要使用IoC。在MenuModule.cs(位于模块的根目录中)中,我可以使用unity容器注册视图 我想我觉得这个问题的答案可能在于第一个问题

  1. 配置文件是答案/ 我应该使用配置文件吗? 真正的脱钩?
  2. 如果(不知何故)我们可以 我们应该从代码中注册类型 在模块级别注册类型(I 不想对项目有很多参考)
  3. 我需要知道 提前接口也是如此 建议单独组装 接口
  4. 如果问题听起来很愚蠢,请耐心等待

2 个答案:

答案 0 :(得分:1)

您不需要配置文件来实现真正的解耦。您所需要的只是在shell的引导程序中注册您的类型。我经常打破我的项目,并像这样参考。

合同大会 (仅包含一些简单的类型和接口)

参考:

  • 壳牌
  • 模块

<强>贝壳 (包含在Contract程序集中定义的接口的具体实现)

参考:

  • 没有人

<强>模块 (声明对Contracts程序集中定义的接口的依赖性,例如IMenuRegistry)

参考:

  • 没有人(我使用目录模块搜索目录中的模块)

这是我放在一起的示例项目。在本示例中,为了简单起见,我从shell引用了该模块,但您可以删除该引用并使用目录模块目录在运行时加载已编译的模块: http://dl.getdropbox.com/u/376992/CAGMenus.zip

希望这有帮助, 安德森

答案 1 :(得分:0)

你肯定是在正确的轨道上。使用配置文件注册类型,并将接口放在单独的程序集中。