private function resolveInternalInterface($interface, $preferred, $alternate)
{
$isImplementor = false;
$isConcrete = false;
foreach ($this->types as $name => $type) {
if ($preferred === $name || $alternate === $name || $type->isSubclassOf($preferred) || $type->isSubclassOf($alternate)) {
$isConcrete = true;
break;
}
if ($type->implementsInterface($interface)) {
$isImplementor = true;
if ($interface === $name) {
unset($this->types[$name]);
} elseif ($type->isInternal()) {
$isConcrete = true;
break;
}
}
}
if ($isImplementor && !$isConcrete) {
$this->types = array_merge(array($preferred => new ReflectionClass($preferred)), $this->types);
}
}