private static void DecorateClasses(ClassDecorationWeaver classDecorationWeaver, ICollection<TypeDefinition> classesToDecorate)
        {
            AssertDoNotHaveMultipleConstructors(classesToDecorate);

            foreach (TypeDefinition classToDecorate in classesToDecorate)
            {
                classDecorationWeaver.DecorateClass(classToDecorate);
            }
        }
        public static void Execute()
        {
            IEnumerable<TypeDefinition> typesToProxy = WeavingInformation.ModuleDefinition.Types
                .Where(HasStaticProxyAttribute)
                .ToList();

            var constructorWeaver = new ConstructorWeaver();
            var methodWeaver = new MethodWeaver();

            var interfaceImplementationWeaver = new InterfaceImplementationWeaver(constructorWeaver, methodWeaver);
            var classDecorationWeaver = new ClassDecorationWeaver(constructorWeaver, methodWeaver);

            ImplementInterfaces(
                typesToProxy.Where(x => x.IsInterface),
                interfaceImplementationWeaver);

            DecorateClasses(classDecorationWeaver, typesToProxy.Where(x => x.IsClass).ToList());
        }