public void Generate(CancellationToken cancel)
        {
            this.cancel = cancel;
            moduleInfo = new GenerateModuleInfo
            {
                ModuleTypeInfo = DefineModuleType()
            };

            // types and bindings in module
            foreach (var type in Module.Types.Values)
            {
                if (cancel.IsCancellationRequested) throw new OperationCanceledException(cancel);

                GenerateType(moduleInfo.ModuleTypeInfo, type);
            }

            foreach (var binding in Module.Bindings.Values)
            {
                if (cancel.IsCancellationRequested) throw new OperationCanceledException(cancel);

                GenerateBinding(moduleInfo.ModuleTypeInfo, binding);
            }

            GenerateTypeCtors(moduleInfo.ModuleTypeInfo);
            moduleInfo.ModuleTypeInfo.TypeBuilder.CreateType();
        }