public function __construct(ValueResolverInterface $valueResolver, InstantiatorInterface $instantiator, HydratorInterface $hydrator, CallerInterface $caller)
{
if ($valueResolver instanceof ObjectGeneratorAwareInterface) {
$valueResolver = $valueResolver->withObjectGenerator($this);
}
if ($instantiator instanceof ValueResolverAwareInterface) {
$instantiator = $instantiator->withValueResolver($valueResolver);
}
if ($hydrator instanceof ValueResolverAwareInterface) {
$hydrator = $hydrator->withValueResolver($valueResolver);
}
if ($caller instanceof ValueResolverAwareInterface) {
$caller = $caller->withValueResolver($valueResolver);
}
$this->instantiator = $instantiator;
$this->hydrator = $hydrator;
$this->caller = $caller;
}