Ejemplo n.º 1
0
 private static void SetConcreteModelProperties(ConcreteClassModel model, ShellGenConfig config)
 {
     model.NameSpace         = config.Namespace;
     model.ConcreteTypeName  = config.ConcreteTypeName;
     model.BaseTypeNamespace = config.BaseTypeNamespace;
     model.BaseTypeName      = config.BaseTypeName;
 }
Ejemplo n.º 2
0
        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);
            }
        }
Ejemplo n.º 3
0
 private static void SetDelegatorModelProperties(DelegatorClassModel model, ShellGenConfig config)
 {
     model.NameSpace    = config.Namespace;
     model.BaseTypeName = config.BaseTypeName;
 }