/// <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; } }