Как ABP создает IRepository ‹TEntity› для Entity

Я пытаюсь понять, как ABP делает это.

Обычный рабочий процесс в ABP:

  1. Добавить класс сущности, унаследованный от класса на основе сущности, в основной проект
  2. Добавьте DbSet в контекст в проекте EFCore
  3. Добавить новый интерфейс IEntityAppService и реализацию в проект приложения
  4. В реализации IEntityAppService вставьте IRepository в конструктор
  5. Наслаждаться!!

Что я сделал, чтобы понять:

  1. Я посмотрел исходный код 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<>);
    }
    

Пожалуйста, кто-нибудь может объяснить мне механизм?


person Paul Lee    schedule 24.09.2017    source источник


Ответы (2)



Может быть, вы хотите создать собственный репозиторий. Смотрите документ:

Создать собственный репозиторий

И вы можете заменить репозиторий приложения по умолчанию следующим образом:

[AutoRepositoryTypes(
    typeof(IRepository<>),
    typeof(IRepository<,>),
    typeof(SimpleTaskSystemEfRepositoryBase<>),
    typeof(SimpleTaskSystemEfRepositoryBase<,>)
)]
public class SimpleTaskSystemDbContext : AbpDbContext
{
    ...
}
person tiennguyen    schedule 25.09.2017
comment
Спасибо за ответ, но я просто хочу понять, как это работает. - person Paul Lee; 25.09.2017
comment
да, просто дайте вам некоторую информацию, счастливого дня кодирования: d - person tiennguyen; 25.09.2017