repository dependency injection

add interfaces and implementations