/Mono.Cecil/DefaultAssemblyResolver.cs

http://github.com/jbevain/cecil · C# · 61 lines · 37 code · 15 blank · 9 comment · 4 complexity · df46616763f391ad2e71d6e7b9edab35 MD5 · raw file

  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 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. }