А вот у меня например EFUof я передаю в него AppDbContext которые ef, соответственно все репозитории будут работать с ef, если бы я хотел использовать вместо EF что-нибудь другое то мне пришлось бы менять EFUof на другую реализацию, так?
не менять, а дополнять можно, если так хочеться можна заюзать фабрику контекст провайдеров и подставлять реализацию, но я такого не делал и не понимаю зачем это нужно
нет, для проверки существование твоего репо, если нал, то создаем, если не нал - то юзаем, а то ты всегда будешь создавать новый с каждым обращением к UoF