DefaultAssemblyResolver.cs 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. //
  2. // Author:
  3. // Jb Evain (jbevain@gmail.com)
  4. //
  5. // Copyright (c) 2008 - 2015 Jb Evain
  6. // Copyright (c) 2008 - 2011 Novell, Inc.
  7. //
  8. // Licensed under the MIT/X11 license.
  9. //
  10. using System;
  11. using System.Collections.Generic;
  12. namespace ILRuntime.Mono.Cecil {
  13. public class DefaultAssemblyResolver : BaseAssemblyResolver {
  14. readonly IDictionary<string, AssemblyDefinition> cache;
  15. public DefaultAssemblyResolver ()
  16. {
  17. cache = new Dictionary<string, AssemblyDefinition> (StringComparer.Ordinal);
  18. }
  19. public override AssemblyDefinition Resolve (AssemblyNameReference name)
  20. {
  21. Mixin.CheckName (name);
  22. AssemblyDefinition assembly;
  23. if (cache.TryGetValue (name.FullName, out assembly))
  24. return assembly;
  25. assembly = base.Resolve (name);
  26. cache [name.FullName] = assembly;
  27. return assembly;
  28. }
  29. protected void RegisterAssembly (AssemblyDefinition assembly)
  30. {
  31. if (assembly == null)
  32. throw new ArgumentNullException ("assembly");
  33. var name = assembly.Name.FullName;
  34. if (cache.ContainsKey (name))
  35. return;
  36. cache [name] = assembly;
  37. }
  38. protected override void Dispose (bool disposing)
  39. {
  40. foreach (var assembly in cache.Values)
  41. assembly.Dispose ();
  42. cache.Clear ();
  43. base.Dispose (disposing);
  44. }
  45. }
  46. }