![](/img/trans.png)
[英]Unable to inject IRepository<TEntity> due to “no implicit reference conversion”
[英]How ABP generate IRepository<TEntity> for Entity
我试图了解ABP如何做到以上几点。
ABP中的正常工作流程是:
我尝试理解的内容:
我看了看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()
}
可能是您要创建自定义存储库。 在以下位置查看文档:
您可以这样替换应用程序的默认存储库:
[AutoRepositoryTypes(
typeof(IRepository<>),
typeof(IRepository<,>),
typeof(SimpleTaskSystemEfRepositoryBase<>),
typeof(SimpleTaskSystemEfRepositoryBase<,>)
)]
public class SimpleTaskSystemDbContext : AbpDbContext
{
...
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.