protected override Type LocateViewForModel(Type modelType) { if (_viewModelToViewMapping.ContainsKey(modelType)) { return(_viewModelToViewMapping[modelType]); } if (!typeof(Node).IsAssignableFrom(modelType)) { throw new ViewNotFoundException(modelType.FullName); } var viewModelName = modelType.Name; var viewName = viewModelName.Substring(0, viewModelName.Length - 5); var assembly = Assembly.GetAssembly(modelType); if (!ViewAssemblies.Contains(assembly)) { ViewAssemblies.Add(assembly); } var viewType = assembly.ExportedTypes.First(t => t.Name == viewName); _viewModelToViewMapping.Add(modelType, viewType); return(viewType); }
public SampleViewManager(ViewManagerConfig config) : base(config) { var mappings = from type in ViewAssemblies.SelectMany(x => x.GetExportedTypes()) let attribute = type.GetCustomAttribute <ViewModelAttribute>() where attribute != null && typeof(UIElement).IsAssignableFrom(type) select new { View = type, ViewModel = attribute.ViewModel }; viewModelToViewMapping = mappings.ToDictionary(x => x.ViewModel, x => x.View); }
private void AddTypesAssemblyToListOfPossibleViewAssemblies(Type type) { var assembly = Assembly.GetAssembly(type); if (!ViewAssemblies.Contains(assembly)) { ViewAssemblies.Add(assembly); } }
private Type FindViewTypeFromViewAssemblies(Type modelType) { AddTypesAssemblyToListOfPossibleViewAssemblies(modelType); var viewModelName = modelType.Name; var viewName = GuessViewName(viewModelName); var viewType = ViewAssemblies .SelectMany(a => a.ExportedTypes) .FirstOrDefault(t => t.Name == viewName) ?? typeof(MissingView); return(viewType); }
/// <summary> /// Given the expected name for a view, locate its type (or return null if a suitable type couldn't be found) /// </summary> /// <param name="viewName">View name to locate the type for</param> /// <param name="extraAssemblies">Extra assemblies to search through</param> /// <returns>Type for that view name</returns> protected virtual Type ViewTypeForViewName(string viewName, IEnumerable <Assembly> extraAssemblies) { return(ViewAssemblies.Concat(extraAssemblies).Select(x => x.GetType(viewName)).FirstOrDefault(x => x != null)); }