public static function getInstance($property, AnConfig $config)
    {
        $description = $config['description'];
        $name = $config['name'];

        if (!$name || !$description) {
            throw new AnDomainPropertyException('name [string] or desription [AnDomainDescriptionAbstract] options are missing');
        }

        if ($description->getProperty($name)) {
            $instance = $description->getProperty($name);
        } else {
            if (!isset(self::$_instances[$property])) {
                $classname = 'AnDomain'.AnInflector::camelize($property);
                self::$_instances[$property] = new $classname();
            }
            $instance = clone self::$_instances[$property];
        }

        $instance->setConfig($config);

        $description->setProperty($instance);

        return $instance;
    }