Exemplo n.º 1
0
        private void GeneratedTypeAndChildren(Type source)
        {
            if (!WrapperTypes.ContainsKey(source))
            {
                processedTypes = new List <Type>();
                string fileName   = source.FullName + "Wrapper";
                var    targetUnit = new CodeCompileUnit();
                targetNamespace = new CodeNamespace("GeneratedArtefacts");
                targetUnit.Namespaces.Add(targetNamespace);

                neededAssemblies = new List <string>();
                neededAssemblies.Add("System.dll");
                neededAssemblies.Add("System.ComponentModel.dll");
                neededAssemblies.Add("Framework.dll");

                targetNamespace.Imports.Add(new CodeNamespaceImport("System"));
                targetNamespace.Imports.Add(new CodeNamespaceImport("System.ComponentModel"));

                GenerateType(source);

                DOMGenerator.GenerateCSharpCode(targetUnit, fileName);
                DOMGenerator.CompileCSharpCode(fileName, neededAssemblies);

                Assembly typeAssembly = Assembly.LoadFrom(fileName + ".dll");
                var      wrapperTypes = typeAssembly.GetTypes();

                for (int i = 0; i < wrapperTypes.Count(); i++)
                {
                    WrapperTypes.Add(processedTypes[i], wrapperTypes[i]);
                    Generator.CreateDataTemplateEntries(processedTypes[i], wrapperTypes[i]);
                }
            }
        }
Exemplo n.º 2
0
        public static Type GetWrapperType(Type dataType, CodeNamespace targetNamespace = null)
        {
            DOMGenerator generator = new DOMGenerator();

            generator.GeneratedTypeAndChildren(dataType);
            return(WrapperTypes[dataType]);
        }
Exemplo n.º 3
0
        public static object GetWrapper(object source)
        {
            if (DOMGenerator.WrapperTypes.ContainsValue(source.GetType()))
            {
                return(source);
            }

            if (Wrappers.ContainsKey(source))
            {
                return(Wrappers[source]);
            }
            else
            {
                var    wrapperType    = DOMGenerator.GetWrapperType(source.GetType());
                object concreteObject = Activator.CreateInstance(wrapperType, new object[] { source });
                Wrappers.Add(source, concreteObject);
                return(concreteObject);
            }
        }