我在PHP中重构旧的应用程序。
我试图使用Symfony依赖注入组件将服务注入控制器(或其他服务),但我不知道如何实现这一点,因为symphony文档比框架组件更适合使用框架。
我已经有了自己的内核,包含所有服务和控制器的容器(控制器已经注册为服务)。我的控制器从symfony/frameworkbundle
扩展AbstractController。所以我现在唯一能做的就是:
通过$this从容器获取服务-
public function __constructor(SomeClass $someClass)
然后我得到一个例外:
编译容器时,“App\V2\Service\TestService”服务或别名已被删除或内联。您应该将其公开,或者停止直接使用容器,改用依赖项注入。
如果我更改配置以公开所有服务,则:
函数APP\V2\Service\TestService::\uu construct()的参数太少,传递了0个,预期正好是1个
我准备了一个要点,以便更好地了解我所说的内容:https://gist.github.com/miedzwin/49bac1cc1d5270d3ba1bfcf700abf864
有人能帮我一点使用Symfony组件(不是Symfony框架)的DI实现吗?好的工作榜样就足够了。或者请把你的话放在我的要点上,我试着解决这个问题。
https://symfony.com/doc/current/service_container.html#fetching-以及使用服务
您需要更改服务的默认配置以使其公开:
services:
_defaults:
public: true
但是访问服务的更优雅的方法是在控制器操作中注入它们:
public function myAction(Request $request, TestService $service)
根据你的问题和评论,我认为你所需要做的就是修复自动布线。
Symfony 4路简单:自动连接所有服务和参数,无需手动设置(如果可能)。
要将其应用到您的示例中,这将是适合您的需要和Symfony 4的最佳配置:
services:
_defaults:
# pass service dependencies to constructors by default
autowire: true
# add known tags (for commands, event subscribers etc) by default
autoconfigure: true
# to make using tests, bin files and another simpler
public: true
# autowiring of string/array/int parameters to constructors
# this fixes cases like "argument "$facebookUserId" of method "__construct()" has no type-hint, you should configure its value explicitly"
bind:
# $constructorVariableName: %parameter% in config
$facebookUserId: '%facebook_user_id%'
APP\V2\:
resource: '../src/app/V2/*'
exclude: '../src/app/V2/{Script, Trait}'
# symfony services - you still have to setup 3rd paryt services manually
Symfony\Component\DependencyInjection\ParameterBag\ContainerBag:
arguments:
- '@service_container'
# ...
然而,Eclipse告诉我“没有bean可以被注入到注入点[JSR-299§5.2.1]”。我做错了什么?你有没有看到我缺少的东西。如有任何帮助,我们将不胜感激。 谢谢!!
供给方组件: 注入方组件: 浏览器中可以正常展示: 但是如果在供给方组件中,更换ElMessage和provide的顺序,如下图: 浏览器中就无法正常渲染,并且控制台报警告: 请问这是什么原因呢? 备注: "element-plus": "^2.3.12" "vue": "^3.3.4"
问题内容: 我想将依赖项注入。但是,我的方法不起作用。我可以看到Spring正在调用我的setter方法,但是稍后在调用when时,该属性为。 这是我的设置: ServletContextListener: web.xml :(这是文件中的最后一个侦听器) applicationContext.xml: 输出: 实现此目的的正确方法是什么? 问题答案: 我通过删除侦听器bean并为我的属性创建了一
我想向Springbean注入一个单例对象依赖关系。问题是我无法访问和修改要注入其对象的类。让我描述一下这个例子。 所以我有我的接口,以及这个接口的实现,如下所示。 然后在我的配置类中,我正在创建一个bean,但是我需要在构造函数中向它传递对象,问题是我不能使成为bean,因为它来自外部包,我不能修改它。 所以我想做的是,能够将/autowire参数传递给bean。目前IntelliJ给我一个错误
在React中,想做依赖注入(Dependency Injection)其实相当简单。请看下面这个例子: // Title.jsx export default function Title(props) { return <h1>{ props.title }</h1>; } // Header.jsx import Title from './Title.jsx'; export defa
依赖注入 Dependency Injection is a strong mechanism, which helps us easily manage dependencies of our classes. It is very popular pattern in strongly typed languages like C# and Java. 依赖注入是一个很强大的机制,该机制可以帮