Вы никогда не работаете "через интерфейс", хотя бы потому что он не имеет реализации.
Но вы можете сделать следующее:
...
public function setRepository (RepositoryInterface $repository) {
$this->repository = $repository;
}
...
Таким образом передать в качестве аргумента можно любой объект, класс которого реализует RepositoryInterface, и только такой объект. Так же можно передавать его в конструкторе при создании объекта, если он обязательно нужен.
А вообще рекомендую почитать про Inversion of Control (IoC) и Dependency Injection (DI) - это вещи, которые вы захотите использовать с таким подходом.