public void Execute() { var freezableTypeFinder = new FreezableTypeFinder(ModuleDefinition, AssemblyResolver); freezableTypeFinder.Execute(); var exceptionFinder = new ExceptionFinder(ModuleDefinition, AssemblyResolver); exceptionFinder.Execute(); var volatileFinder = new VolatileTypeFinder(ModuleDefinition, AssemblyResolver); volatileFinder.Execute(); var volatileFieldFixer = new VolatileFieldFixer(volatileFinder); var fieldInjector = new FieldInjector(volatileFinder, ModuleDefinition.TypeSystem, volatileFieldFixer); var checkIsFrozenBuilder = new CheckIsFrozenBuilder(ModuleDefinition.TypeSystem, exceptionFinder); var freezeCheckerInjector = new FreezeCheckerInjector(ModuleDefinition, fieldInjector, checkIsFrozenBuilder); var typeResolver = new TypeResolver(); var implementsInterfaceFinder = new ImplementsInterfaceFinder(typeResolver); var classes = ModuleDefinition.GetTypes() .Where(x => x.IsClass) .ToList(); var assemblyProcessor = new AssemblyProcessor(freezeCheckerInjector, implementsInterfaceFinder, LogInfo); assemblyProcessor.Execute(classes); volatileFieldFixer.Execute(classes); }