|
// Copyright Christophe Bertrand.
using System;
using System.Collections.Generic;
using System.Reflection;
namespace UniversalSerializerLib3
{
// #############################################################################
// ######################################################################
/*/// <summary>
/// A table of the assemblies that define modifiers (filters and containers).
/// </summary>
public class ModifiersAssemblies : List<ModifiersAssembly>
{}*/
/// <summary>
/// An assembly that defines modifiers (filters and containers).
/// </summary>
public class ModifiersAssembly
{
// - - -
/// <summary>
/// Assembly.
/// </summary>
public readonly Assembly assembly;
internal readonly CustomModifiers aggregatedCustomModifiers;
// - - -
ModifiersAssembly(Assembly assembly)
{
this.assembly = assembly;
var cmt = new List<CustomModifiers>();
var types = assembly.GetTypes();
CustomModifiers acm = CustomModifiers.Empty;
foreach (Type t in types)
{
if (t.IsClass) // optimization.
if (t.Inherits(typeof(CustomModifiers)))
{
var cm = (CustomModifiers)Activator.CreateInstance(t);
if (!(cm is CustomModifiers_Empty))
acm = acm.GetCombinationWithOtherCustomModifiers(cm);
}
}
this.aggregatedCustomModifiers = acm;
}
// - - -
/// <summary>
/// Find modifiers of this assembly.
/// </summary>
/// <param name="assembly"></param>
/// <returns></returns>
public static ModifiersAssembly GetModifiersAssembly(Assembly assembly)
{
ModifiersAssembly ret = null;
if (!_ModifiersAssemblyCache.TryGetValue(assembly, out ret))
{
ret = new ModifiersAssembly(assembly);
_ModifiersAssemblyCache.Add(assembly, ret);
}
return ret;
}
static Dictionary<Assembly, ModifiersAssembly> _ModifiersAssemblyCache = new Dictionary<Assembly, ModifiersAssembly>();
// - - -
/// <summary>
/// Find modifiers of this assembly.
/// </summary>
/// <param name="assemblyString">Same as of Assembly.Load() .</param>
/// <returns></returns>
public static ModifiersAssembly GetModifiersAssembly(string assemblyString)
{
Assembly assembly = Assembly.Load(assemblyString);
return ModifiersAssembly.GetModifiersAssembly(assembly);
}
// - - -
// - - -
}
}
|
By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.
If a file you wish to view isn't highlighted, and is a text file (not binary), please
let us know and we'll add colourisation support for it.
Hi !
I made my first program on a Sinclair ZX-81.
Since that day, I have the virus of computers.
Here is my website:
https://chrisbertrand.net
And my blog:
https://chrisbertrandprogramer.wordpress.com/