예제 #1
0
 public WriterTypeBuilder(GroBufWriter groBufWriter, ModuleBuilder module, IWriterCollection writerCollection, IDataMembersExtractor dataMembersExtractor)
 {
     this.groBufWriter         = groBufWriter;
     this.module               = module;
     this.writerCollection     = writerCollection;
     this.dataMembersExtractor = dataMembersExtractor;
 }
예제 #2
0
        public void Remove(Package package, ModuleCollection modules, IWriterCollection writers)
        {
            if (LoadedPackages.Contains(package))
            {
                Unload(package, modules, writers);
            }

            PackagesCollection.Packages.Remove(package);
        }
예제 #3
0
        public static List <IModule> GetAssemblyModules(string assemblyStringOrPath, IWriterCollection writers = null)
        {
            List <Type> types = new List <Type>();
            var         asm   = LoadAssembly(assemblyStringOrPath, writers);

            foreach (var type in asm.GetTypes())
            {
                if (type.GetInterface(typeof(IModule).FullName) != null)
                {
                    types.Add(type);
                }
            }

            return(types.Select(t => (IModule)Activator.CreateInstance(t)).ToList());
        }
예제 #4
0
 public static Assembly LoadAssembly(string assembly, IWriterCollection writers = null)
 {
     if (File.Exists(assembly))
     {
         string fileName = new FileInfo(assembly).FullName;
         if (writers != null)
         {
             writers.Debug.WriteLine(string.Format("Loading assembly from file {0}", fileName));
         }
         return(Assembly.LoadFile(fileName));
     }
     else
     {
         if (writers != null)
         {
             writers.Debug.WriteLine(string.Format("Loading assembly from assembly string '{0}'", assembly));
         }
         return(Assembly.Load(assembly));
     }
 }
예제 #5
0
        public void Unload(Package package, ModuleCollection modules, IWriterCollection writers)
        {
            if (!LoadedPackages.Contains(package))
            {
                throw new Exception(string.Format("The package {0} is not loaded", package.Name));
            }

            Dictionary <string, System.Reflection.Assembly> asmDic = new Dictionary <string, System.Reflection.Assembly>();

            foreach (var module in package.Modules)
            {
                Type moduleType = null;
                System.Reflection.Assembly asm = null;

                try
                {
                    if (!asmDic.ContainsKey(module.Assembly))
                    {
                        asmDic.Add(module.Assembly, Util.LoadAssembly(module.Assembly));
                    }
                    asm = asmDic[module.Assembly];

                    moduleType = asm.GetType(module.ModuleType);
                    modules.Uninstall(moduleType, writers);
                    writers.Verbose.WriteLine(string.Format("Uninstalled module '{0}' from assembly '{1}'", moduleType, asm));
                }
                catch (Exception ex)
                {
                    writers.Error.WriteLine(string.Format("An error occured while uninstalling module '{0}' from assembly '{1}' :: {2}\r\n{3}"
                                                          , moduleType, asm.CodeBase.Replace("file:///", string.Empty), ex.Message, ex.StackTrace));

                    writers.Error.WriteLine("The application should be restarted to ensure that the package is fully unloaded.");
                }
            }

            _loadedPackageNames.Remove(package.Name);
        }
 public ModuleUninstaller(CommandCollection commands, List <IModule> modules, IWriterCollection writers)
 {
     _commands = commands;
     _modules  = modules;
     _writers  = writers;
 }
예제 #7
0
 public WriterTypeBuilderContext(GroBufWriter groBufWriter, ModuleBuilder module, Type constantsType, Dictionary <Type, FieldInfo[]> fields, IWriterCollection writerCollection, IDataMembersExtractor dataMembersExtractor)
 {
     GroBufWriter              = groBufWriter;
     Module                    = module;
     ConstantsType             = constantsType;
     this.fields               = fields;
     this.writerCollection     = writerCollection;
     this.dataMembersExtractor = dataMembersExtractor;
 }
예제 #8
0
 internal BufferedRtfWriter(RichTextBox rtb)
 {
     _rtb = rtb;
     CreateBuffer();
     Out = new HostWriterCollection(OnHostWriterActionHandler, this);
 }
예제 #9
0
 public bool Uninstall(Type moduleType, IWriterCollection writers)
 {
     return(new ModuleUninstaller(_commands, _modules, writers).Uninstall(moduleType));
 }
예제 #10
0
 public bool Uninstall(string moduleName, IWriterCollection writers)
 {
     return(new ModuleUninstaller(_commands, _modules, writers)
            .Uninstall(this.FirstOrDefault(m => m.Name.Equals(moduleName, StringComparison.OrdinalIgnoreCase)).GetType()));
 }
 public WriterConstantsBuilderContext(GroBufWriter groBufWriter, TypeBuilder constantsBuilder, IWriterCollection writerCollection, IDataMembersExtractor dataMembersExtractor)
 {
     GroBufWriter              = groBufWriter;
     ConstantsBuilder          = constantsBuilder;
     this.writerCollection     = writerCollection;
     this.dataMembersExtractor = dataMembersExtractor;
 }
예제 #12
0
        public void Load(Package package, ModuleCollection modules, IWriterCollection writers)
        {
            if (PackageLogic.Instance.LoadedPackages.Contains(package))
            {
                throw new Exception(string.Format("The package {0} is already loaded", package.Name));
            }

            Dictionary <string, System.Reflection.Assembly> asmDic = new Dictionary <string, System.Reflection.Assembly>();

            bool isErrors = false;

            if (package.Modules.Count > 0)
            {
                foreach (var module in package.Modules)
                {
                    Type moduleType = null;
                    System.Reflection.Assembly asm = null;

                    try
                    {
                        if (!asmDic.ContainsKey(module.Assembly))
                        {
                            asmDic.Add(module.Assembly, Util.LoadAssembly(module.Assembly));
                        }
                        asm = asmDic[module.Assembly];

                        moduleType = asm.GetType(module.ModuleType);
                        if (!modules.Install(moduleType, writers) && isErrors == false)
                        {
                            isErrors = true;
                        }
                    }
                    catch (Exception ex)
                    {
                        writers.Error.WriteLine(string.Format("An error occured while installing module '{0}' from assembly '{1}' :: {2}\r\n{3}"
                                                              , moduleType, asm.CodeBase.Replace("file:///", string.Empty), ex.Message, ex.StackTrace));

                        if (moduleType != null && modules.Any(m => m.GetType() == moduleType))
                        {
                            modules.Uninstall(moduleType, writers);
                        }

                        writers.Error.WriteLine("The module has been uninstalled.");

                        isErrors = true;
                    }
                }
            }
            else
            {
                writers.Warning.WriteLine("The package has been loaded but no modules were installed - the package does not define any modules.");
            }

            _loadedPackageNames.Add(package.Name);

            if (isErrors)
            {
                writers.Warning.WriteLine("The package has been loaded with errors.");
            }
            else
            {
                writers.Standard.WriteLine("Package loaded");
            }
        }
예제 #13
0
 internal ObjectWriter(IWriterCollection writers, IBufferedWriter buffer)
 {
     _writers = writers;
     _buffer  = buffer;
 }