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