Die Abhängigkeitsinjektion wird dem Kern hinzugefügt, es gibt jedoch keine Dokumentation darüber, wie Entwickler die Standarddienste ändern können. Zum Beispiel möchte ich die Klasse cache.bootstrap in APC Caching ändern.
Die Abhängigkeitsinjektion wird dem Kern hinzugefügt, es gibt jedoch keine Dokumentation darüber, wie Entwickler die Standarddienste ändern können. Zum Beispiel möchte ich die Klasse cache.bootstrap in APC Caching ändern.
Antworten:
Sie können sich LanguageTestServiceProvider ansehen, um zu sehen, wie Änderungen vorgenommen werden. Oder ich kann meine Klasse anbieten:
<?php
namespace Drupal\mongodb;
use Drupal\Core\DependencyInjection\ServiceModifierInterface;
use Drupal\Core\DependencyInjection\ServiceProviderInterface;
use Drupal\Core\DependencyInjection\ContainerBuilder;
/**
* MongoDB service provider. Registers Mongo-related services.
*/
class MongodbServiceProvider implements ServiceProviderInterface, ServiceModifierInterface {
/**
* {@inheritdoc}
*/
public function register(ContainerBuilder $container) {
}
/**
* {@inheritdoc}
*/
public function alter(ContainerBuilder $container) {
foreach ($container->findTaggedServiceIds('mongodb.override') as $id => $attribute) {
$container->setDefinition(substr($id, 8), $container->getDefinition($id));
}
}
}
Grundsätzlich müssen alter
Sie die getDefinition
Methode verwenden, etwas mit der Definition tun und sie dann mithilfe der setDefinition
Methode zurücksetzen.
und dann sind hier die relevanten Teile von mongodb.services.yml:
services:
mongodb.flood:
class: Drupal\mongodb\Flood\MongoDBBackend
arguments: ['@mongo', '@request']
tags:
- { name: mongodb.override }
setDefintion()
wenn Sie es verwendet haben getDefinition()
- Sie können einfach die Definition aktualisieren.