It might be worth thinking about a `HydratorConfig` object, the interface of these config objects can indicate how the intended Hydrator is to be used or what it will be doing. And at the same time would remove any need for get/set methods (but they can be left there for BC). This way the constructor can simply set the configuration object or the parts it wants (e.g. $strategies).

In the constructor I'd rather see `$this->strategies = $strategies` than a for loop.

Ideally (imo), all the strategy related methods, should go into a Strategy Config object, and the hydrator could provide a convenience method so that they can be configured via `$hydrator->strategies()->addStrategy()` etc.

The HydratorConfigInterface might look like

```php
interface ConfigInterface
{
  public function filters();
  public function strategies();
}
```

I'm currently not seeing much point to the Extract and Hydrate Contexts, why not just pass the object itself?

The namingStrategy bugs me a little, but I don't know what to suggest atm.

I also wondered if the cache could also be a config?