2

私は私たちの見解の多くにこのコード(または同様のもの)を持っています:

private IEventAggregator eventAggregator;

Constructor()
{
    eventAggregator = ServiceLocator.Current.GetInstance<IEventAggregator>();
    ...
}

この投稿から、ServiceLocator.CurrentがNullReferenceException(コンストラクターで悪いこと)をスローする可能性があることを読みましたが、GetInstance <>()メソッドがnull(または他の一貫性のないオブジェクト)を返す可能性があり、eventAggregatorを後で他のメソッドで使用するのは危険です。 。

注:私はMVVMとWPFにまったく慣れていません

4

1 に答える 1

1

servicelocatorがnullの場合は、Unityが正しく設定されていない可能性があります。通常の状況では、それは私見の問題ではありません。

そうは言っても、私はサービスロケーターに到達するために少し異なる方法を使用する傾向があります。

たとえば、MyClassというクラスがある場合、Unity依存性注入を使用してservicelocatorを渡します(Unityのコンテナーとも呼ばれます)。また、GetInstanceではなくunityのResolve機能を使用する傾向がありますが、同じです。

servicelocatorはアンチパターンであるという話もありますが、私はその考え方に賛成しません。 http://blog.ploeh.dk/2010/02/03/ServiceLocatorIsAnAntiPattern.aspx

public MyClass(IUnityContainer container)
{
    var ea = container.Resolve<IEventAggregator>();
}
于 2012-07-06T03:14:05.043 に答える