private object GetValueCore(IClass @class, bool other) { if (@class == null) { return(null); } var systemType = MappedType.FromType(@class).SystemType; var defaultImplementation = systemType.GetCustomAttributes(typeof(DefaultImplementationTypeAttribute), false); return(Activator.CreateInstance((defaultImplementation[0] as DefaultImplementationTypeAttribute).DefaultImplementationType)); }
private object GetValueCore(PrimitiveType type, bool other) { var systemType = MappedType.FromType(type).SystemType; if (systemType == typeof(bool)) { return(other); } if (systemType == typeof(Uri)) { return(other ? new Uri("foo://bar") : new Uri("bar://foo")); } if (other) { return(Convert.ChangeType(42, systemType)); } else { return(Convert.ChangeType(23, systemType)); } }
private void RegisterAssembly(Assembly assembly) { if (!traversedAssemblies.Add(assembly)) { return; } var references = assembly.GetReferencedAssemblies(); if (references != null) { for (int i = 0; i < references.Length; i++) { try { RegisterAssembly(Assembly.Load(references[i])); } catch (System.IO.IOException) { // eat exception } } } var attributes = assembly.GetCustomAttributes(typeof(ModelMetadataAttribute), false); if (attributes != null && attributes.Length > 0) { var types = assembly.GetTypes(); var saveMapping = new List <KeyValuePair <string, System.Type> >(); if (types != null) { for (int i = 0; i < types.Length; i++) { var t = types[i]; var modelRepresentation = t.GetCustomAttributes(typeof(ModelRepresentationClassAttribute), false); if (modelRepresentation != null && modelRepresentation.Length > 0) { serializer.KnownTypes.Add(t); var attr = (ModelRepresentationClassAttribute)modelRepresentation[0]; if (!t.IsInterface) { var iface = t.GetInterface("I" + t.Name); if (iface != null) { t = iface; } } saveMapping.Add(new KeyValuePair <string, System.Type>(attr.UriString, t)); } } } var names = assembly.GetManifestResourceNames(); if (names == null || names.Length == 0) { throw new Exception($"The assembly {assembly.FullName} declares a model but has no embedded resources. Did you forget to embed a model?"); } for (int i = 0; i < attributes.Length; i++) { var metadata = attributes[i] as ModelMetadataAttribute; if (metadata != null && names.Contains(metadata.ResourceName) && metadata.ModelUri.IsAbsoluteUri) { #if DEBUG LoadModel(assembly, attributes, i, metadata); #else try { LoadModel(assembly, attributes, i, metadata); } catch (Exception e) { var hint = ""; if (i < attributes.Length - 1) { hint = " Hint: Resources are loaded in the order in which they are specified. If a metamodel requires another metamodel from the same assembly, the metadata attribute must be specified afterwards. All metamodels must be in the same directory."; } throw new Exception($"Error loading the embedded resource {metadata.ResourceName} from assembly {assembly.FullName}: {e.Message}{hint}", e);; } #endif } else { throw new Exception($"The declared embedded resource {metadata.ResourceName} of asembly {assembly.FullName} could not be found."); } } for (int i = 0; i < saveMapping.Count; i++) { var cls = ResolveType(saveMapping[i].Key); if (cls != null) { var typeExtension = MappedType.FromType(cls); typeExtension.SystemType = saveMapping[i].Value; } else { throw new InvalidOperationException(string.Format("The class {0} could not be resolved.", saveMapping[i].Key)); } } } }
private void MapType(IType type, System.Type systemType) { MappedType.FromType(type).SystemType = systemType; }
private void RegisterAssembly(Assembly assembly) { var attributes = assembly.GetCustomAttributes(typeof(ModelMetadataAttribute), false); if (attributes != null && attributes.Length > 0 && modelAssemblies.Add(assembly)) { var references = assembly.GetReferencedAssemblies(); if (references != null) { for (int i = 0; i < references.Length; i++) { RegisterAssembly(Assembly.Load(references[i])); } } var types = assembly.GetTypes(); var saveMapping = new List <KeyValuePair <string, System.Type> >(); if (types != null) { for (int i = 0; i < types.Length; i++) { var t = types[i]; var modelRepresentation = t.GetCustomAttributes(typeof(ModelRepresentationClassAttribute), false); if (modelRepresentation != null && modelRepresentation.Length > 0) { serializer.KnownTypes.Add(t); var attr = (ModelRepresentationClassAttribute)modelRepresentation[0]; saveMapping.Add(new KeyValuePair <string, System.Type>(attr.UriString, t)); } } } var names = assembly.GetManifestResourceNames(); for (int i = 0; i < attributes.Length; i++) { var metadata = attributes[i] as ModelMetadataAttribute; Uri modelUri; if (metadata != null && names.Contains(metadata.ResourceName) && Uri.TryCreate(metadata.ModelUri, UriKind.Absolute, out modelUri)) { #if DEBUG serializer.Deserialize(assembly.GetManifestResourceStream(metadata.ResourceName), modelUri, this, true); #else try { serializer.Deserialize(assembly.GetManifestResourceStream(metadata.ResourceName), modelUri, this, true); } catch (Exception ex) { Console.Error.WriteLine(ex.Message); } #endif } } for (int i = 0; i < saveMapping.Count; i++) { var cls = ResolveType(saveMapping[i].Key); if (cls != null) { var typeExtension = MappedType.FromType(cls); typeExtension.SystemType = saveMapping[i].Value; } else { throw new InvalidOperationException(string.Format("The class {0} could not be resolved.", saveMapping[i].Key)); } } } }
private object GetValueCore(Enumeration enumeration, bool other) { var systemType = MappedType.FromType(enumeration).SystemType; return(Enum.GetValues(systemType).GetValue(other ? 1 : 0)); }