Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
        private void AddTypesAssemblyToListOfPossibleViewAssemblies(Type type)
        {
            var assembly = Assembly.GetAssembly(type);

            if (!ViewAssemblies.Contains(assembly))
            {
                ViewAssemblies.Add(assembly);
            }
        }
Exemplo n.º 4
0
        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);
        }
Exemplo n.º 5
0
 /// <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));
 }