public virtual IModule LoadModule(ModuleIdentity moduleIdentity) {
IUnit/*?*/ unit;
lock (GlobalLock.LockingObject) {
this.unitCache.TryGetValue(moduleIdentity, out unit);
}
IModule/*?*/ result;
if (unit != null)
result = unit as IModule;
else {
if (moduleIdentity.Location == "" || moduleIdentity.Location == "unknown://location") {
result = Dummy.Module;
lock (GlobalLock.LockingObject) {
this.unitCache.Add(moduleIdentity, result);
}
} else {
unit = this.LoadUnitFrom(moduleIdentity.Location);
result = unit as IModule;
if (result != null)
lock (GlobalLock.LockingObject) {
this.unitCache.Add(moduleIdentity, result);
this.coreIdentities.Add(result.CoreAssemblySymbolicIdentity);
}
}
}
if (result == null) result = Dummy.Module;
return result;
}