Created
November 2, 2016 07:09
-
-
Save nuitsjp/d3e3d819fb68e31b884800caa94a56bc to your computer and use it in GitHub Desktop.
PrismでViewとViewModelを別アセンブリにする場合のコードサンプル
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
ViewTypeToViewModelTypeResolver _resolver; | |
protected override void ConfigureViewModelLocator() | |
{ | |
base.ConfigureViewModelLocator(); | |
_resolver = new ViewTypeToViewModelTypeResolver(typeof(MainWindowViewModel).Assembly); // とりあえず適当なVMからAssembly取得して設定しておく | |
ViewModelLocationProvider.SetDefaultViewTypeToViewModelTypeResolver(_resolver.Resolve); | |
} | |
public class ViewTypeToViewModelTypeResolver | |
{ | |
private readonly Assembly _assembly; | |
public ViewTypeToViewModelTypeResolver(Assembly assembly) | |
{ | |
_assembly = assembly; | |
} | |
public Type Resolve(Type viewType) | |
{ | |
if (viewType == null) throw new ArgumentNullException(nameof(viewType)); | |
// ReSharper disable once PossibleNullReferenceException | |
var vmTypeName = $"{viewType.Namespace.Replace("Views", "ViewModels")}.{viewType.Name}ViewModel"; | |
var vmType = _assembly.GetType(vmTypeName); | |
return vmType; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment