Aloha,

When https://github.com/symfony/symfony/pull/535 was merged I noticed that this 
was causing issues when I tried to set an alternative service container, 
because ContainerAwareInterface implementing classes would now get the service 
container injected after my custom service container, effectively overwriting 
my customer container.

I created a quick fix which was reverted for good reasons.

I have created two additional pulls which in my opinion fix the issue, which is 
being able to override interface injection on a per service basis:

1) https://github.com/symfony/symfony/pull/544
This pull effectively disables interface injection whenever a service has any 
explicit call's configured.

liip_hello.phpcr.controller:
    class: Liip\HelloBundle\Controller\PHPCRController
    calls:
        - ['setContainer', [ @liip_hello.container ] ]

2) https://github.com/symfony/symfony/pull/547
This pull adds a new flag to determine if interface injection should be 
disabled for this service

liip_hello.phpcr.controller:
    class: Liip\HelloBundle\Controller\PHPCRController
    interfaceInjectionEnabled: false
    calls:
        - ['setContainer', [ @liip_hello.container ] ]

Another approach would be to stop using interface injection in core entirely. 
However I think the same issues will then be caused by 3rd party bundles. I 
think the end user defining a service should always have final control over 
what gets injected. For the same reason we do not inherit stuff like tags's 
which cannot be removed in a service definition.

3) Now Johannes does not seem to like either of the proposed solutions. He 
indicated on IRC that he would prefer a more granular solution, where there 
would be an optional flag on a per method basis for disabling interface 
injection.

I could it would look like something like the following, where the third 
element in the array would define that no "setContainer" calls should be added 
via interface injection.

liip_hello.phpcr.controller:
    class: Liip\HelloBundle\Controller\PHPCRController
    calls:
        - ['setContainer', [ @liip_hello.container ], true ]

4) Jeremy was suggesting a setting that would determine some conflict 
resolution strategy
https://github.com/symfony/symfony/pull/544#issuecomment-995402

Personally I think that interface injection is nice syntax sugar, but its not 
critical to have. However it should definitely not get in the way of defining a 
service with custom dependencies. Of course I can always change the code to not 
implement the interface, but that kinda perverts the entire idea of dependency 
injection. So I think its critical that we fix the current situation.

regards,
Lukas Kahwe Smith
[email protected]



-- 
If you want to report a vulnerability issue on symfony, please send it to 
security at symfony-project.com

You received this message because you are subscribed to the Google
Groups "symfony developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/symfony-devs?hl=en

Reply via email to