1

我正在考虑使用 Prism 在 Silverlight 3 中做一个项目,我真的很喜欢这里显示的事件聚合http://development-guides.silverbaylabs.org/Video/Prism-Eventing

所有资源似乎都指向使用 Unity 和 Prism 而不是 Ninject。在 Ninject 中是否有类似的聚合事件方式?或者如果我想使用 Prism,我是否仅限于 Unity?

4

1 回答 1

8

你在这里很幸运。

Prism 中的 EventAggregation 不是 Unity 容器的功能,而是 Prism 自动放入容器中供客户端类使用的东西。因此,类声明它们具有 IEventAggregator 依赖项,并通过依赖项注入将其实例提供给该类。这里要带走的东西:它是独立的。

所以,你有几个选择。

  1. 如果您不需要 Prism 的任何其他功能(组件模块化等),您可以简单地使用 Ninject 并将 EventAggregator 的实例插入到您的 Ninject 容器中以供应用程序的其余部分使用。

  2. 如果您想要 Prism 的其他功能,您可以替换 DI 容器实现。不幸的是,我无法找到一个具体的例子,但我认为你所要做的就是用你自己制作的“NinjectBootstrapper”重新实现基本的“UnityBootstrapper”类型。我认为 UnityBootrapper 是 Prism 组件(EventAggregator、RegionManager 等)与 Unity 接触的唯一点(特别是在“ConfigureContainer”的实现中)。 编辑:我错了。您还必须使用特定于 Ninject 的实现来实现 IServiceLocator。不过没什么大不了的。

  3. 拥抱团结。这是一个非常好的 DI 容器,具有很大的灵活性。它没有 Ninject 的流畅界面,但它肯定不难使用。

  4. 您可以使用 MVVMFoundation ( http://mvvmfoundation.codeplex.com )中包含的另一个类似的事件系统。它被称为 Messenger,它的功能与 Prism 中的 EventAggregator 差不多,但您下载的库要轻得多。

希望这对你来说有足够的选择!

于 2009-07-30T13:37:54.007 回答