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); }
public void Engage() { foreach (var field in new FieldSelector().Select(context)) { // if the field type is not yet registered throw an exception if (!context.Container.IsTypeRegistered(field.FieldType)) { throw new TypeResolvingFailedException(Strings.TypeNotRegistered); } // Engage the value var fieldValue = context.Container.Resolve(field.FieldType); // Set the fields value var fieldInjector = new FieldInjector(context, field, fieldValue); fieldInjector.Inject(); } }
public FreezeCheckerInjector(ModuleDefinition moduleDefinition, FieldInjector fieldInjector, CheckIsFrozenBuilder checkIsFrozenBuilder) { this.moduleDefinition = moduleDefinition; this.fieldInjector = fieldInjector; this.checkIsFrozenBuilder = checkIsFrozenBuilder; }