1

Prismを使用してSilverlight 3でプロジェクトを行うことを検討しています。ここに示すように、イベント集約が本当に好きですhttp://development-guides.silverbaylabs.org/Video/Prism-Eventing

すべてのリソースは、Ninject ではなく、Prism で Unity を使用することを示しているようです。Ninject では、イベントを集約する同様の方法はありますか? または、Prism を使用したい場合、Unity に限定されますか?

4

1 に答える 1

8

あなたはここで幸運です。

Prism の EventAggregation は Unity コンテナの機能ではなく、クライアント クラスが使用するコンテナに Prism が自動的に配置するものです。したがって、クラスは IEventAggregator 依存関係があることを宣言し、そのインスタンスは依存性注入によってそのクラスに与えられます。ここで忘れてはいけないのは、スタンドアロンであることです。

したがって、いくつかのオプションがあります。

  1. Prism の他の機能 (コンポーネントのモジュール性など) が必要ない場合は、単純に Ninject を使用し、EventAggregator のインスタンスを Ninject コンテナーに挿入して、残りのアプリケーションで使用できるようにします。

  2. Prism の他の機能が必要な場合は、DI コンテナーの実装を置き換えることができます。残念ながら、これの具体的な例を見つけることができませんでしたが、あなたがしなければならないことは、独自に作成した「NinjectBootstrapper」の 1 つで基本の「UnityBootstrapper」タイプを再実装することだけだったと思います。UnityBootrapper は、Prism コンポーネント (EventAggregator、RegionManager など) が Unity と接触する唯一のポイントだと思います (具体的には「ConfigureContainer」の実装において)。 編集:私はここで間違っています。また、Ninject 固有の実装で IServiceLocator を実装する必要があります。しかし、大したことではありません。

  3. ユニティを受け入れます。これは、柔軟性に優れた非常に優れた DI コンテナーです。Ninject のような流暢なインターフェースはありませんが、使いにくいことは確かにありません。

  4. MVVMFoundation ( http://mvvmfoundation.codeplex.com ) に含まれている別の同様のイベント システムを使用できます。それは Messenger と呼ばれ、EventAggregator が Prism で行うこととほとんど同じことを行いますが、ダウンロードするライブラリははるかに軽量です。

これがあなたにとって十分なオプションであることを願っています!

于 2009-07-30T13:37:54.007 に答える