我想了解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<>);
}
请有人向我解释这个机制吗?
答案 0 :(得分:5)
魔法在jsfiddle,其中:
<div contenteditable="true">
<p id="p1">
<span id="s1">S</span><span id="s2">o</span><span id="s3">m</span><span id="s4">e</span><span id="s5"> </span><span id="s6">t</span><span id="s7">e</span><span id="s8">x</span><span id="s9">t</span>
</p>
</div>
请注意EfGenericRepositoryRegistrar.cs
不是抽象的。
答案 1 :(得分:0)
可能是您要创建自定义存储库。查看文档:
您可以像这样替换默认的应用程序存储库:
[AutoRepositoryTypes(
typeof(IRepository<>),
typeof(IRepository<,>),
typeof(SimpleTaskSystemEfRepositoryBase<>),
typeof(SimpleTaskSystemEfRepositoryBase<,>)
)]
public class SimpleTaskSystemDbContext : AbpDbContext
{
...
}