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]); } } }
public static Type GetWrapperType(Type dataType, CodeNamespace targetNamespace = null) { DOMGenerator generator = new DOMGenerator(); generator.GeneratedTypeAndChildren(dataType); return(WrapperTypes[dataType]); }
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); } }