示例#1
0
        public static List <AdviceModel> FromTypeDefinitions(IEnumerable <TypeDefinition> types)
        {
            var instance = new AspectModelBuilder();

            instance.FillDictionaries(types);

            return(instance.ProcessAdvice());
        }
示例#2
0
        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();
            }
        }