Exemple #1
0
        /// <summary>
        /// Populates the provided <paramref name="collection"/> with the assemblies generated by this silo.
        /// </summary>
        /// <param name="collection">The collection to populate.</param>
        public void UpdateGeneratedAssemblies(GeneratedAssemblies collection)
        {
            var generatedAssemblies = CodeGeneratorManager.GetGeneratedAssemblies();

            foreach (var asm in generatedAssemblies)
            {
                collection.Add(asm.Key, asm.Value);
            }
        }
        /// <summary>
        /// Initializes this instance.
        /// </summary>
        public void Initialize()
        {
            if (this.initialized)
            {
                return;
            }

            lock (this.initializationLock)
            {
                if (this.initialized)
                {
                    return;
                }

                // load the code generator before intercepting assembly loading
                codeGeneratorManager.Initialize();

                // initialize serialization for all assemblies to be loaded.
                AppDomain.CurrentDomain.AssemblyLoad += this.OnAssemblyLoad;

                Assembly[] assemblies = AppDomain.CurrentDomain.GetAssemblies();

                // initialize serialization for already loaded assemblies.
                var generated = codeGeneratorManager.GenerateAndLoadForAssemblies(assemblies);
                if (generated != null)
                {
                    foreach (var generatedAssembly in generated)
                    {
                        this.ProcessAssembly(generatedAssembly?.Assembly);
                    }
                }

                foreach (var generatedAssembly in CodeGeneratorManager.GetGeneratedAssemblies().Values)
                {
                    this.ProcessAssembly(generatedAssembly?.Assembly);
                }

                foreach (var assembly in assemblies)
                {
                    this.ProcessAssembly(assembly);
                }

                this.initialized = true;
            }
        }