此外/无障碍/容器和服务/覆盖标准软件服务

重写默认服务

容器中获取默认服务可以通过在用户容器中添加一个具有类似接口的自定义服务来修改。 您需要创建一个新服务,并在App\Bootstrap\ContainerFactory类的 'getSingleton' 方法中返回它,然后再从默认服务中进行选择。 在 HLEB2 框架中,每个内置服务使用两个相同的接口(用于不同的命名选项),您必须为以 'Interface'结尾的接口返回您的自定义服务作为singleton。 例如,对于缓存服务,它将是'Hleb\Reference\CacheInterface'

<?php
// File /app/Bootstrap/ContainerFactory.php

namespace App\Bootstrap;

use 
Hleb\Constructor\Containers\BaseContainerFactory;
use 
Hleb\Reference\CacheInterface;

final class 
ContainerFactory extends BaseContainerFactory
{
    public static function 
getSingleton(string $id): mixed
    
{
        
self::has($id) or self::$singletons[$id] = match ($id) {
            
// Adding a replacement for a service.
            
CacheInterface::class => new OtherCacheService(),

            
// ... //
            
default => null
        
};
        return 
self::$singletons[$id];
    }

    public static function 
rollback(): void
    
{
        
// ... //
    
}
}

该示例展示了如何将默认缓存服务替换为您自己的服务。 在这里,它可以使用数据库存储进行缓存,而不是基于文件的(默认)。

同样,您可以通过将默认服务重写为 NULL 值来“删除”它。 但首先,您必须确保该服务既未在框架本身的代码中使用,也未在应用程序代码中使用。

页面翻译:chatgpt 4-o
返回顶部