Я пытаюсь понять, как ABP делает это.
Обычный рабочий процесс в ABP:
- Добавить класс сущности, унаследованный от класса на основе сущности, в основной проект
- Добавьте DbSet в контекст в проекте EFCore
- Добавить новый интерфейс IEntityAppService и реализацию в проект приложения
- В реализации IEntityAppService вставьте IRepository в конструктор
- Наслаждаться!!
Что я сделал, чтобы понять:
Я посмотрел исходный код Abp и у меня сложилось впечатление, что это делается Open Generics между
IRepository<T>
иEfCoreRepositoryBase<T>
с помощью Factory magic. Однако я попытался сделать это в AspNetCore DI с помощью:public void ConfigureServices(IServiceCollection services) { // Add framework services. // adding DbContext // adding Mvc etc.... // RepositoryBase => like EfCoreRepositoryBase in ABP // Error on this line, DI can not instantiate RepositoryBase as it is abstract services.AddTransient<IRepository<>, RepositoryBase<>); }
Пожалуйста, кто-нибудь может объяснить мне механизм?