PrismのIModuleInitialize()メソッドでは、RegisterViewWithRegion()メソッドが呼び出されて、ビューと領域がマップされます。
これらの2行のコードの違いは何ですか?なぜServiceLocatorを使用するのですか?
_regionManager.RegisterViewWithRegion("Region1", () => _serviceLocator.GetInstance<View1>());
_regionManager.RegisterViewWithRegion("Region1", typeof(View1));
コンテキストのModuleInit.csクラス全体を次に示します。
namespace MyModule
{
[ModuleExport("MyModule.ModuleInit", typeof(MyModule.ModuleInit))]
public class ModuleInit : IModule
{
private readonly IRegionManager _regionManager;
public IServiceLocator _serviceLocator;
[ImportingConstructor]
public ModuleInit(IRegionManager regionManager, IServiceLocator serviceLocator)
{
_regionManager = regionManager;
_serviceLocator = serviceLocator;
}
#region IModule Members
public void Initialize()
{
_regionManager.RegisterViewWithRegion("Region1", () => _serviceLocator.GetInstance<View1>());
}
#endregion
}
}
[編集]
RegisterViewWithRegionメソッドのMSDNサイトでは、2つの異なるバージョンの機能について説明しています。
RegisterViewWithRegion(IRegionManager, String, Func<Object>)
ビューのconcreateインスタンスを解決するためにデリゲートを使用して、ビューをリージョンに関連付けます。リージョンが表示されると、このデレルゲートが呼び出され、結果がリージョンのビューコレクションに追加されます。
RegisterViewWithRegion(IRegionManager, String, Type)
タイプを登録して、ビューをリージョンに関連付けます。リージョンが表示されると、このタイプはServiceLocatorを使用して具体的なインスタンスに解決されます。インスタンスがリージョンのViewsコレクションに追加されます
したがって、唯一の違いは、ServiceLocatorを使用して、タイプをインスタンスにすぐに解決するか、後でリージョンが表示されたときに解決することだと思いますか?
[編集2]
Stackoverflowの他の場所で答えを見つけました