private IDictionary<string, Type> GetViewModelTypeMapping()
{
dynamic appDomain = AppDomain.CurrentDomain;
var assemblies = (Assembly[])appDomain.GetAssemblies();
var mapping = new Dictionary<string, Type>();
var designTimeAssemblies =
assemblies.Where(a => a.FullName.Contains("Design,")).OrderBy(a => a.FullName).OrderBy(
a => File.GetLastWriteTime(a.Location)).Reverse();
string lastAssembly = null;
foreach (var assembly in designTimeAssemblies)
{
if (assembly.FullName != lastAssembly)
{
var types = assembly.GetTypes().Where(t=>t.Name.EndsWith("Design"));
foreach (var type in types)
{
var viewModelName = type.Name.Substring(0, type.Name.Length - "Design".Length);
mapping[viewModelName] = type;
}
}
lastAssembly = assembly.FullName;
}
return mapping;
}