I had a decent talk with both José's last night about this and I think we both agreed that proposal 2 has the best chance of being good in the long term.
* It gives one simple API for all configuration.
* There is one convention for everything. Keeping true to the conventions over configuration.
* Its easy for plugin authors to use, and easy for app's to configure plugins from.
* It offers the simplest path for loading configuration from static files, or non-static sources e.g feature switches loaded from Redis.
It has a few architectural drawback:
* Dependency information is *pulled* out of Configure and constructed/handled in each adapter based class. Interestingly enough this is similar to how all existing adapter classes work. We never pass instances in when creating cache/logging setups. But instead pass classnames + constructor parameters.
* The various adapter based classes will continue to need a drop() style method to remove the existing adapter instance when configuration is changed.
With enough of a decision reached, I'm going to continue working on the configuration changes post cakefest.
-Mark