54 readonly ConditionalWeakTable<Assembly, RuntimeAssemblyClassLoader> assemblyClassLoaders =
new();
56#if !IMPORTER && !EXPORTER && !FIRST_PASS
57 internal Dictionary<string, string> customClassLoaderRedirects;
67 this.context = context ??
throw new ArgumentNullException(nameof(context));
78 if (assemblyClassLoaders.TryGetValue(assembly, out RuntimeAssemblyClassLoader loader))
81 loader = Create(assembly);
83 lock (assemblyClassLoaders)
85 if (assemblyClassLoaders.TryGetValue(assembly, out var existing))
88 assemblyClassLoaders.Add(assembly, loader);
99 RuntimeAssemblyClassLoader Create(
Assembly assembly)
103 var forwarder = assembly.GetType(
"__<MainAssembly>");
104 if (forwarder !=
null)
106 var mainAssembly = forwarder.Assembly;
107 if (mainAssembly != assembly)
111 var baseAssembly = context.Resolver.ResolveBaseAssembly().AsReflection();
113 if (baseAssembly !=
null && assembly.IsDefined(context.Resolver.ResolveRuntimeType(
"IKVM.Attributes.RemappedClassAttribute").AsReflection(),
false))
114 context.ClassLoaderFactory.LoadRemappedTypes();
117 if (baseAssembly == assembly)
123 return (RuntimeAssemblyClassLoader)context.ClassLoaderFactory.GetBootstrapClassLoader();
126 return new RuntimeAssemblyClassLoader(context, assembly);
Maintains services relevant to an instane of the IKVM runtime.