62 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			62 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| //
 | |
| // 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 MonoFN.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);
 | |
| 		}
 | |
| 	}
 | |
| }
 |