/Mono.Cecil/DefaultAssemblyResolver.cs
http://github.com/jbevain/cecil · C# · 61 lines · 37 code · 15 blank · 9 comment · 4 complexity · df46616763f391ad2e71d6e7b9edab35 MD5 · raw file
- //
- // 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 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);
- }
- }
- }