În Drupal, clasa pentru un serviciu definit într-un fișier modul .services.yml nu trebuie să fie implementată create(ContainerInterface $container). Nici măcar nu se solicită implementarea unei interfețe PHP specifice.
Vedeți unul dintre serviciile implementate de bază Drupal, de exemplu path_alias.manager serviciu.
path_alias.manager:
  clasa: Drupal\path_alias\AliasManager
  argumente:
   - „@path_alias.repository”
   - „@path_alias.whitelist”
   - „@language_manager”
   - „@cache.data”
The AliasManager clasa care implementează acel serviciu nu implementează niciunul crea() metodă; doar implementează constructor, cu parametrii definiți în aceeași ordine sunt listate argumentele serviciului.
funcția publică __construct($alias_repository, AliasWhitelistInterface $whitelist, LanguageManagerInterface $language_manager, CacheBackendInterface $cache) {
  $this->pathAliasRepository = $alias_repository;
  $this->languageManager = $language_manager;
  $this->whitelist = $listă albă;
  $this->cache = $cache;
}
Clasele care implementează create(ContainerInterface $container) și care implementează ContainerInjectionInterface, de exemplu cel CronForm clasă, nu returnați o închidere de la create(ContainerInterface $container); ei returnează de fapt doar o instanță a lor. Vedea CronForm::create().
funcția publică statică create(ContainerInterface $container) {
  returnează static nou ($container->get('config.factory'),
    $container->get('state'),
    $container->get('cron'),
    $container->get('data.formatter'),
    $container->get('module_handler')
  );
}
Dacă doriți să implementați un serviciu din fabrică în Drupal, ar trebui să luați cache_factory serviciu ca exemplu pentru a vă scrie codul.
cache_factory:
  clasa: Drupal\Core\Cache\CacheFactory
  argumente:
    - „@settings”
    - „%cache_default_bin_backends%”
  apeleaza:
    - [setContainer, ['@service_container']]
Un serviciu care folosește acel serviciu ca fabrică este, de exemplu, the cache.render serviciu.
cache.render:
  clasa: Drupal\Core\Cache\CacheBackendInterface
  Etichete:
    - { nume: cache.bin }
  fabrică:
    - „@cache_factory”
    - obține
  argumente:
    - reda
The fabrică cheia definește care serviciu este serviciul din fabrică și ce metodă este apelată pentru acel serviciu din fabrică; cel argumente cheia definește argumentele transmise acelei metode. În acest caz, îi spune lui Drupal să instanțieze cache.render serviciu prin instanțierea cache_factory service și apelare obtine('renda') pe acel obiect.