public static List <AdviceModel> FromTypeDefinitions(IEnumerable <TypeDefinition> types) { var instance = new AspectModelBuilder(); instance.FillDictionaries(types); return(instance.ProcessAdvice()); }
public static void Weave(string[] assemblyPaths) { var modules = new List <ModuleDefinition>(); ModuleDefinition demonModule = null; try { demonModule = HackyLoadDemonModule(); var demonTypes = DemonTypes.FromModule(demonModule); foreach (var path in assemblyPaths) { modules.Add(ModuleDefinition.ReadModule(path, new ReaderParameters { ReadWrite = true })); } var allTypes = modules.SelectMany(m => m.GetTypes()).ToList(); var advice = AspectModelBuilder.FromTypeDefinitions(allTypes); //todo filter to not run on aspects accidentally foreach (var type in allTypes) { TypeWeaver.Weave(type, advice, demonTypes); } //todo check file locking issues foreach (var module in modules) { module.Write(); } } finally { foreach (var module in modules) { module.Dispose(); } demonModule?.Dispose(); } }