예제 #1
0
        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));
        }
예제 #2
0
        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));
            }
        }
예제 #3
0
        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));
                    }
                }
            }
        }
예제 #4
0
 private void MapType(IType type, System.Type systemType)
 {
     MappedType.FromType(type).SystemType = systemType;
 }
예제 #5
0
        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));
                    }
                }
            }
        }
예제 #6
0
        private object GetValueCore(Enumeration enumeration, bool other)
        {
            var systemType = MappedType.FromType(enumeration).SystemType;

            return(Enum.GetValues(systemType).GetValue(other ? 1 : 0));
        }