private AssemblyLoader GetLoaderForExportedAssembly(Assembly assembly)
{
LazyInitExports();
AssemblyLoader loader;
lock (exportedLoaders)
{
exportedLoaders.TryGetValue(assembly, out loader);
}
if (loader == null)
{
loader = new AssemblyLoader(assembly);
lock (exportedLoaders)
{
AssemblyLoader existing;
if (exportedLoaders.TryGetValue(assembly, out existing))
{
// another thread beat us to it
loader = existing;
}
else
{
exportedLoaders.Add(assembly, loader);
}
}
}
return loader;
}