2

Prism と MVVM を使用して WPF プロジェクトの作業を開始しました。eventAggregator を使用しようとしていますが、以下の行を実行すると例外が発生します。

IServiceLocator ob = ServiceLocator.Current; // This line causes a Null pointer exception
EventAggregator = ob.GetInstance<IEventAggregator>();

しかし、私は自分が間違っていることを理解できません。おそらくこれは非常に単純なことですが、私はこれに数時間苦労しています。

誰かが私を助けてくれることを願っています、事前に感謝します

4

1 に答える 1

4

ロケーターの初期化コードがありません。

Prism を使用しているか (そうですか?)、ブートストラップを正しく設定する必要があります - http://msdn.microsoft.com/en-us/library/gg430868(PandP.40).aspx

または、Prism を使用せず、ロケーターを手動でセットアップするだけです (Mainたとえば):

IUnityContainer container = new UnityContainer();

// register the singleton of your event aggregator
container.RegisterType<IEventAggregator, EventAggregator>( new ContainerControlledLifetimeManager() ); 

ServiceLocator.SetLocatorProvider( () => container );

次に、コードの任意の場所で呼び出すことができます

var eventAggregator = ServiceLocator.Current.GetInstance<IEventAggregator>();

編集: 質問を編集し、Prism について言及しました。次に、カスタム ブートストラップを作成し、型を登録して、ブートストラップを実行する必要があります。

public class CustomBootstrapper : UnityBootstrapper 
{
}

そして電話する

var bootstrapper = new CustomBootstrapper();
bootstrapper.Run();

アプリケーションの開始ルーチンで。私が覚えていることから、シングルトンとしてUnityBootstrapper登録するIEventAggregatorので、それを繰り返す必要はありません。

于 2012-08-01T18:46:00.660 に答える