/// <summary> /// Constructor that accepts type name. /// </summary> /// <param name="typeName">Type name.</param> /// <param name="factoryDelegate">Factory delegate to create objects of this type.</param> public TypeHelper(string typeName, Func <object[], object> factoryDelegate = null) { _isRuntimeType = true; _factoryDelegate = factoryDelegate ?? (args => VMController.CreateInstance(Type, args)); Name = typeName.Contains(".") ? typeName.Split('.').Last() : typeName; FullName = typeName; }
/// <summary> /// Constructor that accepts type. /// </summary> /// <param name="type">Type.</param> public TypeHelper(Type type) { Type = type; Name = type.Name; FullName = type.FullName; _factoryDelegate = args => VMController.CreateInstance(Type, args); }
/// <summary> /// Constructor that accepts type. /// </summary> /// <param name="type">Type.</param> /// <param name="factoryDelegate">Factory delegate to create objects of this type.</param> public TypeHelper(Type type, Func <object[], object> factoryDelegate = null) { Type = type; Name = type.Name; FullName = type.FullName; _factoryDelegate = factoryDelegate ?? (args => VMController.CreateInstance(Type, args)); }
/// <summary> /// Creates a view model instance. /// </summary> /// <param name="registeredTypes">Registered view model types.</param> /// <param name="vmTypeName">View model type name.</param> /// <param name="vmInstanceId">Optional view model instance identifier.</param> /// <param name="vmNamespace">Optional view model type namespace.</param> /// <returns></returns> internal static BaseVM Create(IEnumerable <Type> registeredTypes, string vmTypeName, string vmInstanceId = null, string vmNamespace = null) { Type vmType = vmNamespace != null? registeredTypes.FirstOrDefault(i => i.FullName == $"{vmNamespace}.{vmTypeName}") : registeredTypes.FirstOrDefault(i => i.Name == vmTypeName); if (vmType == null) { return(null); } try { if (vmInstanceId != null) { var instance = VMController.CreateInstance(vmType, new object[] { vmInstanceId }) as INotifyPropertyChanged; if (instance != null) { return(instance is BaseVM ? instance as BaseVM : new BaseVM(instance)); } } } catch (MissingMethodException) { Trace.Fail($"[dotNetify] ERROR: '{vmTypeName}' has no constructor accepting instance ID."); } try { var instance = VMController.CreateInstance(vmType, null) as INotifyPropertyChanged; if (instance != null) { return(instance is BaseVM ? instance as BaseVM : new BaseVM(instance)); } } catch (MissingMethodException) { Trace.Fail($"[dotNetify] ERROR: '{vmTypeName}' has no parameterless constructor."); } return(null); }