繁体   English   中英

ABP如何生成IRepository <TEntity> 对于实体

[英]How ABP generate IRepository<TEntity> for Entity

我试图了解ABP如何做到以上几点。

ABP中的正常工作流程是:

  1. 将继承自基于实体的类的实体类添加到Core项目
  2. 将DbSet添加到EFCore项目的上下文中
  3. 向应用程序项目添加新的IEntityAppService接口和实现
  4. 在IEntityAppService实现中,将IRepository注入构造函数
  5. 请享用!!

我尝试理解的内容:

  1. 我看了看Abp源代码后,得到的印象是,这是由Open Generics在IRepository<T>EfCoreRepositoryBase<T>通过Factory魔术完成的。 但是,我试图在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<>); } 

请有人可以向我解释该机制吗?

魔术在EfGenericRepositoryRegistrar.cs ,其中:

foreach (var entityTypeInfo in _dbContextEntityFinder.GetEntityTypeInfos(dbContextType))
{
    // ...

    iocManager.IocContainer.Register(
        Component
            .For(genericRepositoryType)
            .ImplementedBy(implType)
            .Named(Guid.NewGuid().ToString("N"))
            .LifestyleTransient()
}

请注意, EfCoreRepositoryBaseOfTEntityAndTPrimaryKey.cs不是抽象的。

可能是您要创建自定义存储库。 在以下位置查看文档:

创建自定义存储库

您可以这样替换应用程序的默认存储库:

[AutoRepositoryTypes(
    typeof(IRepository<>),
    typeof(IRepository<,>),
    typeof(SimpleTaskSystemEfRepositoryBase<>),
    typeof(SimpleTaskSystemEfRepositoryBase<,>)
)]
public class SimpleTaskSystemDbContext : AbpDbContext
{
    ...
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM