我正在考虑使用Prism在Silverlight 3中做一个项目,我真的很喜欢这里显示的事件聚合http://development-guides.silverbaylabs.org/Video/Prism-Eventing
所有资源似乎都指向使用Unity with Prism而不是Ninject。在Ninject中是否有类似的聚合事件的方式?或者,如果我想使用Prism,我只限于Unity?
答案 0 :(得分:8)
你在这里很幸运。
Prism中的EventAggregation不是Unity容器的功能,而是Prism自动放入容器中供客户端类使用的东西。所以类声明它们具有IEventAggregator依赖性,并且通过依赖注入将该实例赋予该类。要带走的东西:它是独立的。
所以,你有几个选择。
如果您不需要Prism的任何其他功能(组件模块化等),您可以简单地使用Ninject并将EventAggregator的实例插入Ninject容器中,供其他应用程序使用。
如果您想要Prism的其他功能,可以替换DI容器实现。不幸的是,我无法找到一个具体的例子,但我认为你所要做的就是重新实现基础“UnityBootstrapper”类型与你自己制作的“NinjectBootstrapper”。我认为UnityBootrapper是Prism组件(EventAggregator,RegionManager等)与Unity接触的唯一点(特别是在“ConfigureContainer”的实现中)。 修改:我错了。您还必须使用Ninject特定的实现来实现IServiceLocator。不过没什么大不了的。
拥抱Unity。这是一个非常好的DI容器,具有很大的灵活性。它没有Ninject所做的流畅界面,但它肯定不难使用。
您可以使用MVVMFoundation(http://mvvmfoundation.codeplex.com)中包含的另一个类似的事件系统。它被称为Messenger,它几乎与EventAggregator在Prism中的作用相同,但是你下载的库要轻得多。
希望这是你的足够选择!