Added RepositoryProvider and RepositoryFactories

Added IRepositoryProvider implementation RepositoryProvider and
IRepositoryFactories implementation RepositoryFactories
Revert "Added RepositoryProvider and RepositoryFactories"

This reverts commit 090354d628b8839a7a207ecf4eb7c353d8a32ca1.
Revert "Revert "Added RepositoryProvider and RepositoryFactories""

This reverts commit f5c71a0c608dc54fdc50bc5202ddb56d8addcd12.