| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- //
- // Author:
- // Jb Evain (jbevain@gmail.com)
- //
- // Copyright (c) 2008 - 2015 Jb Evain
- // Copyright (c) 2008 - 2011 Novell, Inc.
- //
- // Licensed under the MIT/X11 license.
- //
- using System;
- using System.Collections.Generic;
- namespace ILRuntime.Mono.Cecil {
- public class DefaultAssemblyResolver : BaseAssemblyResolver {
- readonly IDictionary<string, AssemblyDefinition> cache;
- public DefaultAssemblyResolver ()
- {
- cache = new Dictionary<string, AssemblyDefinition> (StringComparer.Ordinal);
- }
- public override AssemblyDefinition Resolve (AssemblyNameReference name)
- {
- Mixin.CheckName (name);
- AssemblyDefinition assembly;
- if (cache.TryGetValue (name.FullName, out assembly))
- return assembly;
- assembly = base.Resolve (name);
- cache [name.FullName] = assembly;
- return assembly;
- }
- protected void RegisterAssembly (AssemblyDefinition assembly)
- {
- if (assembly == null)
- throw new ArgumentNullException ("assembly");
- var name = assembly.Name.FullName;
- if (cache.ContainsKey (name))
- return;
- cache [name] = assembly;
- }
- protected override void Dispose (bool disposing)
- {
- foreach (var assembly in cache.Values)
- assembly.Dispose ();
- cache.Clear ();
- base.Dispose (disposing);
- }
- }
- }
|