Symfonyob娱乐下载 5.4新增功能:依赖注入改进
在服务定位器中注入带标记的服务
在Syob娱乐下载mfony 5.4中可以使用迭代器标记作为论证服务定位器,简化了在其他服务中注入带标签的服务。下面的例子展示了在使用YAML配置时如何使用这个特性(它也适用于XML和PHP配置):
12 3 4 5 6 7 8 9 10 11 12 13 14 15
#配置/ services.yaml服务:_instanceof:App \命令\ HandlerInterface:标签:(“app.command_handler”)app.command_handlers:类:ob娱乐下载Symfony \ \ DependencyInjection \ ServiceLocator组件参数:[!tagged_iterator{标签:“app.command_handler”,default_index_method:“getCommandName”})App \ CommandBus:参数:(“@app.command_handlers”)App \ AnotherCommandBus:参数:(“@app.command_handlers”)
自动连接联合和交叉类型
提供的
尼古拉斯Grekas
在# 43479.
PHP 8.0增加了联合类型(例如:ClassA | ClassB $变量
)和PHP 8.1添加了交集类型(ClassA和ClassB $变量
).在Syob娱乐下载mfony 5.4中,我们改进了DependencyInjection组件来同时支持这两种组件。例如:
1 2 3 4
公共函数__construct(NormalizerInterface & DenormalizerInterface$序列化器){/ /……}
当两种类型都有相应的自动装配别名,并且两个别名都指向相同的服务时,交集类型的自动装配就能工作。
TaggedIterator和TaggedLocator属性的新配置选项
在为服务使用带标记的迭代器和定位器时,可以定义带优先级标记的服务而且带索引的标记服务.在Syob娱乐下载mfony 5.4中,我们改进了TaggedIterator
而且TaggedLocator
属性,所以你也可以在属性中定义这些选项:
12 3 4 5 6 7 8 9 10 11 12 13 14 15
使用Psr\容器\ContainerInterface;使用ob娱乐下载\组件\DependencyInjection\属性\TaggedIterator;使用ob娱乐下载\组件\DependencyInjection\属性\TaggedLocator;公共函数__construct(# (TaggedIterator(标签:'...'defaultPriorityMethod:“getPriority”)私有iterable$论点, ){}公共函数__construct(# (TaggedLocator(标签:'...'defaultIndexMethod:“getDefaultFooName”)private ContainerInterface$论点, ){}
添加了一个新的SubscribedService属性
在以前的Symfony版ob娱乐下载本中,ServiceSubscriberTrait
可用于在某些类方法中注入服务。此特征查找类中没有参数和返回类型的所有方法ServiceLocator
用于那些返回类型的服务。
这种行为在大多数情况下工作得很好,但在某些情况下,通常会有这样的方法(没有参数,只有返回类型),不应该注入任何服务。这就是为什么在Symfonyob娱乐下载 5.4中,我们已经弃用了这种行为,并引入了新的SubscribedService
PHP属性。
将该属性添加到任何你想注入服务的方法中:
12 3 4 5 6 7 8 9 10 11 12 13 14 16 17 18 19 20 21
使用Psr\日志\LoggerInterface;使用ob娱乐下载\组件\路由\RouterInterface;使用ob娱乐下载\合同\服务\属性\SubscribedService;使用ob娱乐下载\合同\服务\ServiceSubscriberInterface;类MyService实现了ServiceSubscriberInterface{# (SubscribedService)私人函数路由器():RouterInterface{返回$这->容器->get (__METHOD__);}# (SubscribedService)私人函数日志记录器():LoggerInterface{返回$这->容器->get (__METHOD__);}/ /……}
自动配置方法、属性和参数
提供的
路德Kamphuis
在# 42039.
在Syob娱乐下载mfony中,您可以使用如下代码自动配置带有属性注释的类依赖注入扩展:
1 2 3 4 5 6
$容器->registerAttributeForAutoconfiguration (MyAttribute::类,静态函数(ChildDefinition$定义, MyAttribute$属性, \ ReflectionClass$反射器):无效{$定义->addTag (“my_tag”, (“some_property”= >$属性->someProperty]);});
在Syob娱乐下载mfony 5.4中,我们改进了这个特性,允许您自动配置方法、属性和参数。首先,确保在应用程序中定义了一些PHP属性,允许在方法和属性上使用它们。
现在,在一些方法和/或属性中使用该PHP属性:
1 2 3 4 5 6 7 8
# (MyAttribute)类MyService{}类MyOtherService{# (MyAttribute)公共函数myMethod(){}}
您现在可以使用registerAttributeForAutoconfiguration ()
方法,以及要搜索的类型的并集。在本例中,扩展只关心类和方法,因此它使用美元\ ReflectionClass | \ ReflectionMethod反射器
:
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16
最后类MyBundleExtension扩展扩展{公共函数负载(数组$配置, ContainerBuilder$容器):无效{$容器->registerAttributeForAutoconfiguration (MyAttribute::类,静态函数(ChildDefinition$定义, MyAttribute$属性, \ ReflectionClass | \ ReflectionMethod$反射器):无效{$arg游戏= [];如果($反射器运算符\ ReflectionMethod) {$arg游戏[“方法”] =$反射器->getName ();}$定义->addTag (“my.tag”,$arg游戏);});}}
评论
评论截止。
为了确保评论保持相关性,旧帖子将被关闭。