-
Notifications
You must be signed in to change notification settings - Fork 9.4k
Description
Since we now have the DI system creating the objects and the system being tight to the environment, do you think it's worth having an environment-aware DI system?
Is there something in the current codebase that handles such "conditionals"?
It would facilitate custom object creation along the pipeline. Some examples:
- different log object for develoment (DEBUG, text), CI (info, text) and production (ERROR, 3rd party)
- different email implementations for development (to file) and production (to email server)
- payment mocks on development
The DI system could rely only on $_ENV for this and it will still be pretty awesome. Otherwise, some other sub-system would take care of this and it wouldn't be right, because it's the DI who should decide what object goes where and when. Something similar to the layout's ifconfig.
I'm not sure about the implementation though, as, for example, preference is a 1-to-1 relationship. Keeping BC, maybe something like this is possible to implement (assuming $_ENV['ENV_TYPE'] is set to dev, ci or prod):
<preferenceIf for="\My\LoggerInterface" switch="ENV_TYPE" default="dev">
<dev>\My\FullLogger</dev> <!-- or <case value="dev">\My\FullLogger</case> -->
<ci>ciLoggerVirtualType</ci>
<prod>\Some\ThirdPartyLogger</prod>
</preferenceIf>For now I'm thinking that this could be done for preference only, not type or virtualType.
I think it would be a shame to let such a flexible DI become a... static thing.
What do you think?