public function getBasicDefinition($class)
    {
        if (!class_exists($class)) {
            throw new \InvalidArgumentException("$class is not a valid class name");
        }

        $definition = new Definition($class, []);

        $traits = $this->classUsesDeep($class);
        foreach ($traits as $trait) {
            switch ($trait) {
                case 'Smartbox\Integration\FrameworkBundle\DependencyInjection\Traits\UsesEvaluator':
                    $definition->addMethodCall('setEvaluator', [new Reference('smartesb.util.evaluator')]);
                    break;

                case 'Smartbox\Integration\FrameworkBundle\DependencyInjection\Traits\UsesSerializer':
                    $definition->addMethodCall('setSerializer', [new Reference('jms_serializer')]);
                    break;

                case 'Smartbox\Integration\FrameworkBundle\DependencyInjection\Traits\UsesValidator':
                    $definition->addMethodCall('setValidator', [new Reference('validator')]);
                    break;

                case 'Smartbox\Integration\FrameworkBundle\DependencyInjection\Traits\UsesEventDispatcher':
                    $definition->addMethodCall('setEventDispatcher', [new Reference('event_dispatcher')]);
                    break;

                case 'Smartbox\Integration\FrameworkBundle\DependencyInjection\Traits\UsesEndpointFactory':
                    $definition->addMethodCall('setEndpointFactory', [new Reference('smartesb.endpoint_factory')]);
                    break;

                case 'Smartbox\Integration\FrameworkBundle\DependencyInjection\Traits\UsesEndpointRouter':
                    $definition->addMethodCall('setEndpointsRouter', [new Reference('smartesb.router.endpoints')]);
                    break;

                case 'Smartbox\Integration\FrameworkBundle\DependencyInjection\Traits\MessageFactoryAware':
                    $definition->addMethodCall('setMessageFactory', [new Reference('smartesb.message_factory')]);
                    break;

                case 'Smartbox\Integration\FrameworkBundle\DependencyInjection\Traits\UsesCacheService':
                    $definition->addMethodCall('setCacheService', [new Reference('smartcore.cache_service')]);
                    break;

                case 'Symfony\Component\DependencyInjection\ContainerAwareTrait':
                    $definition->addMethodCall('setContainer', [new Reference('service_container')]);
                    break;
            }
        }

        return $definition;
    }