private static void SetConcreteModelProperties(ConcreteClassModel model, ShellGenConfig config) { model.NameSpace = config.Namespace; model.ConcreteTypeName = config.ConcreteTypeName; model.BaseTypeNamespace = config.BaseTypeNamespace; model.BaseTypeName = config.BaseTypeName; }
public override void Add(Action <string> output = null, Action <string> error = null) { try { HashSet <FileInfo> codeFiles = new HashSet <FileInfo>(); HandlebarsTemplateRenderer renderer = new HandlebarsTemplateRenderer(new HandlebarsEmbeddedResources(GetType().Assembly)); RoslynCompiler compiler = new RoslynCompiler(); ShellGenConfig config = GetConfig(); Type baseType = null; if (!Arguments.Contains("generateBaseType")) { Message("Searching current AppDomain for specified base type ({0})", output, config.BaseTypeName); foreach (Assembly assembly in AppDomain.CurrentDomain.GetAssemblies()) { baseType = FindType(assembly, config.BaseTypeNamespace, config.BaseTypeName); if (baseType != null) { Message("Found base type ({0}) in assembly ({1})", output, config.BaseTypeName, assembly.FullName); break; } } } CommandLineDelegatedClassModel model = CommandLineDelegatedClassModel.Create(config.ConcreteTypeName, config.BaseTypeName); model.Namespace = config.Namespace; SetConcreteModelProperties(model.ConcreteClass, config); ShellDescriptor descriptor = new ShellDescriptor(); if (baseType != null) { descriptor = new ShellDescriptor(baseType); model.SetMethods(baseType.GetMethods().Where(m => m.IsAbstract).Select(m => m.Name).ToArray()); } else { model.SetMethods(GetArgument("methodNames", "Please enter the method names to define on the base type (comma separated).") .DelimitSplit(",")); compiler.AddAssemblyReference(typeof(IRegisterArguments)); EnsureBaseType(config.BaseTypeName, config.WriteTo, renderer, model, codeFiles); } model.SetBaseTypeName(config.BaseTypeName); GenerateDelegator(config.WriteTo, model.DelegatorClass, renderer, codeFiles); GenerateConcreteType(config.WriteTo, config.ConcreteTypeName, renderer, model.ConcreteClass, codeFiles); byte[] delegatorAssembly = compiler.Compile(config.ConcreteTypeName, codeFiles.ToArray()); descriptor = ShellGenerationRepository.Save(descriptor); ShellWrapperAssembly wrapperAssembly = new ShellWrapperAssembly { ShellDescriptorKey = descriptor.Key(), Base64Assembly = delegatorAssembly.ToBase64() }; ShellGenerationRepository.Save(wrapperAssembly); } catch (Exception ex) { error(ex.Message); Exit(1); } }
private static void SetDelegatorModelProperties(DelegatorClassModel model, ShellGenConfig config) { model.NameSpace = config.Namespace; model.BaseTypeName = config.BaseTypeName; }