diff --git a/modules/store/console.services.yml b/modules/store/console.services.yml
new file mode 100644
index 00000000..b918a1d2
--- /dev/null
+++ b/modules/store/console.services.yml
@@ -0,0 +1,7 @@
+services:
+  commerce_store.commerce_create_store:
+    class: Drupal\commerce_store\Command\CreateStoreCommand
+    arguments: ['@commerce_price.currency_importer', '@entity_type.manager', '@address.country_repository', '@url_generator', '@email.validator']
+    tags:
+      - { name: drupal.command }
+
diff --git a/modules/store/console/translations/en/commerce.create.store.yml b/modules/store/console/translations/en/commerce.create.store.yml
new file mode 100644
index 00000000..512a25ed
--- /dev/null
+++ b/modules/store/console/translations/en/commerce.create.store.yml
@@ -0,0 +1,9 @@
+description: 'Create a new store.'
+options:
+  name: 'The store name'
+  mail: 'The store mail'
+  country: 'The store country'
+  currency: 'The store currency (optional)'
+arguments: {}
+messages:
+    success: 'I am a new generated command.'
diff --git a/modules/store/src/Command/CreateStoreCommand.php b/modules/store/src/Command/CreateStoreCommand.php
index 6dd5d46d..3751471c 100644
--- a/modules/store/src/Command/CreateStoreCommand.php
+++ b/modules/store/src/Command/CreateStoreCommand.php
@@ -6,38 +6,103 @@ use CommerceGuys\Intl\Currency\CurrencyRepository;
 use Symfony\Component\Console\Input\InputInterface;
 use Symfony\Component\Console\Input\InputOption;
 use Symfony\Component\Console\Output\OutputInterface;
+use Symfony\Component\Console\Command\Command;
+use Drupal\Console\Core\Command\Shared\CommandTrait;
+use Drupal\Console\Core\Style\DrupalStyle;
+use Drupal\Console\Annotations\DrupalCommand;
+use Drupal\commerce_price\CurrencyImporter;
+use Drupal\Core\Entity\EntityTypeManager;
+use Drupal\address\Repository\CountryRepository;
+use Drupal\Core\Render\MetadataBubblingUrlGenerator;
+use Egulias\EmailValidator\EmailValidator;
 use Symfony\Component\Console\Question\Question;
-use Drupal\Console\Command\ContainerAwareCommand;
 
-class CreateStoreCommand extends ContainerAwareCommand {
+/**
+ * Class CreateStoreCommand.
+ *
+ * @package Drupal\commerce_store
+ *
+ * @DrupalCommand (
+ *     extension="commerce_store",
+ *     extensionType="module"
+ * )
+ */
+class CreateStoreCommand extends Command {
 
+  use CommandTrait;
+
+  /**
+   * Drupal\commerce_price\CurrencyImporter definition.
+   *
+   * @var \Drupal\commerce_price\CurrencyImporter
+   */
+  protected $currencyImporter;
+  /**
+   * Drupal\Core\Entity\EntityTypeManager definition.
+   *
+   * @var \Drupal\Core\Entity\EntityTypeManager
+   */
+  protected $entityTypeManager;
+  /**
+   * Drupal\address\Repository\CountryRepository definition.
+   *
+   * @var \Drupal\address\Repository\CountryRepository
+   */
+  protected $countryRepository;
+  /**
+   * Drupal\Core\Render\MetadataBubblingUrlGenerator definition.
+   *
+   * @var \Drupal\Core\Render\MetadataBubblingUrlGenerator
+   */
+  protected $urlGenerator;
+  /**
+   * Egulias\EmailValidator\EmailValidator definition.
+   *
+   * @var \Egulias\EmailValidator\EmailValidator
+   */
+  protected $emailValidator;
+
+  /**
+   * Constructs a new CreateStoreCommand object.
+   *
+   * @param \Drupal\commerce_price\CurrencyImporter $commerce_price_currency_importer
+   * @param \Drupal\Core\Entity\EntityTypeManager $entity_type_manager
+   * @param \Drupal\address\Repository\CountryRepository $address_country_repository
+   * @param \Drupal\Core\Render\MetadataBubblingUrlGenerator $url_generator
+   * @param \Egulias\EmailValidator\EmailValidator $email_validator
+   */
+  public function __construct(CurrencyImporter $commerce_price_currency_importer, EntityTypeManager $entity_type_manager, CountryRepository $address_country_repository, MetadataBubblingUrlGenerator $url_generator, EmailValidator $email_validator) {
+    $this->currencyImporter = $commerce_price_currency_importer;
+    $this->entityTypeManager = $entity_type_manager;
+    $this->countryRepository = $address_country_repository;
+    $this->urlGenerator = $url_generator;
+    $this->emailValidator = $email_validator;
+    parent::__construct();
+  }
   /**
    * {@inheritdoc}
    */
   protected function configure() {
     $this
       ->setName('commerce:create:store')
-      ->setDescription('Create a new store')
-      ->addOption('name', '', InputOption::VALUE_REQUIRED, 'The store name')
-      ->addOption('mail', '', InputOption::VALUE_REQUIRED, 'The store email')
-      ->addOption('country', '', InputOption::VALUE_REQUIRED, 'The store country')
-      ->addOption('currency', '', InputOption::VALUE_OPTIONAL, 'The store currency (optional)');
+      ->setDescription($this->trans('commands.commerce.create.store.description'))
+      ->addOption('name', '', InputOption::VALUE_REQUIRED, $this->trans('commands.commerce.create.store.options.name'))
+      ->addOption('mail', '', InputOption::VALUE_REQUIRED, $this->trans('commands.commerce.create.store.options.mail'))
+      ->addOption('country', '', InputOption::VALUE_REQUIRED, $this->trans('commands.commerce.create.store.options.country'))
+      ->addOption('currency', '', InputOption::VALUE_OPTIONAL, $this->trans('commands.commerce.create.store.options.currency'));
   }
 
   /**
    * {@inheritdoc}
    */
   protected function execute(InputInterface $input, OutputInterface $output) {
-    $container = $this->getContainer();
-    $currency_importer = $container->get('commerce_price.currency_importer');
-    $store_storage = $container->get('entity_type.manager')->getStorage('commerce_store');
+    $io = new DrupalStyle($input, $output);
 
     $country_code = $input->getOption('country');
     $currency_code = $input->getOption('currency');
     // Allow the caller to specify the country, but not the currency.
     if (empty($currency_code)) {
-      $country_repository = $container->get('address.country_repository');
-      $country = $country_repository->get($country_code, 'en');
+      $country = $this->countryRepository->get($country_code, 'en');
       $currency_code = $country->getCurrencyCode();
       if (empty($currency_code)) {
         $message = sprintf('Default currency not known for country %s, please specify one via --currency.', $country_code);
@@ -45,7 +110,8 @@ class CreateStoreCommand extends ContainerAwareCommand {
       }
     }
 
-    $currency_importer->import($currency_code);
+    $store_storage = $this->entityTypeManager->getStorage('commerce_store');
+    $this->currencyImporter->import($currency_code);
     $values = [
       'type' => 'online',
       'uid' => 1,
@@ -63,17 +129,11 @@ class CreateStoreCommand extends ContainerAwareCommand {
       $store_storage->markAsDefault($store);
     }
 
-    $link = $container->get('url_generator')->generate('entity.commerce_store.edit_form', ['commerce_store' => $store->id()], TRUE);
-    $output->writeln(sprintf('The store has been created. Go to %s to complete the store address and manage other settings.', $link));
+    $link = $this->urlGenerator->generate('entity.commerce_store.edit_form', ['commerce_store' => $store->id()], TRUE);
+    $io->writeln(sprintf('The store has been created. Go to %s to complete the store address and manage other settings.', $link));
   }
 
-  /**
-   * {@inheritdoc}
-   */
   protected function interact(InputInterface $input, OutputInterface $output) {
-    $container = $this->getContainer();
-    $mail_validator = $container->get('email.validator');
-    $country_repository = $container->get('address.country_repository');
     $currency_repository = new CurrencyRepository();
     $helper = $this->getHelper('question');
     // Symfony Console has no built-in way to ensure the value is not empty.
@@ -96,8 +156,8 @@ class CreateStoreCommand extends ContainerAwareCommand {
     $mail = $input->getOption('mail');
     if (!$mail) {
       $question = new Question('Enter the store email: ', '');
-      $question->setValidator(function ($mail) use ($mail_validator) {
-        if (empty($mail) || !$mail_validator->isValid($mail)) {
+      $question->setValidator(function ($mail) {
+        if (empty($mail) || !$this->emailValidator->isValid($mail)) {
           throw new \RuntimeException('The entered email is not valid.');
         }
         return $mail;
@@ -108,7 +168,7 @@ class CreateStoreCommand extends ContainerAwareCommand {
     // --country option.
     $country = $input->getOption('country');
     if (!$country) {
-      $country_names = array_flip($country_repository->getList('en'));
+      $country_names = array_flip($this->countryRepository->getList('en'));
       $question = new Question('Enter the store country: ', '');
       $question->setAutocompleterValues($country_names);
       $question->setValidator($required_validator);
@@ -119,7 +179,7 @@ class CreateStoreCommand extends ContainerAwareCommand {
     // --currency option.
     $currency = $input->getOption('currency');
     if (!$currency) {
-      $country = $country_repository->get($country, 'en');
+      $country = $this->countryRepository->get($country, 'en');
       $currency_code = $country->getCurrencyCode();
       if ($currency_code) {
         $question = new Question("Enter the store currency [$currency_code]: ", $currency_code);
