【发布时间】:2019-05-10 07:59:27
【问题描述】:
我有一个共享项目,我将我的共享和基础逻辑c 放入以在其他项目中重复使用,并在其上放置一个普通的 asp.net 核心项目。
在我的共享基础项目中:
class DbContextBase : DbContext
{
public DbSet<ActivityLog> ActivityLogs { get; set; }
public DbSet<Event> Events { get; set; }
SaveChanges(...)
}
class MyEventProcessor
{
private readonly DbContextBase _databaseContext;
public MyEventProcessor(DbContextBase databaseContext)
{
_databaseContext=databaseContext;
}
public void AddEvent(Event e){}
public void ProcessEvent(Event e){}
}
在 .net 核心 webApi 中,我有我的域特定逻辑
class MyDomainDbContext : DbContextBase
{
public DbSet<User> Users{ get; set; }
}
class UserRepository
{
private readonly MyDomainDbContext _databaseContext;
public UserRepository(MyDomainDbContext databaseContext){_databaseContext=databaseContext;}
}
public class Startup
{
public Startup(IConfiguration configuration)
{
services.AddDbContext<MyDomainDbContext>([options]);
services.AddScoped<UserRepository>();
services.AddScoped<EventProcessor>();
}
}
问题是,这种方式在启动时失败,无法找到 DbContextBase,因为它没有注册。 我想过将注册更改为如下所示的界面,但显然我将无法访问我的存储库中我的域的 DbSet。
services.AddDbContext<IDbContextBase,MyDomainDbContext>([options]);
所以问题是,我该如何设置,以便 MyEventProcessor 和 UserRepository 可以读取和写入相同的数据库上下文。
【问题讨论】:
标签: c# asp.net-core entity-framework-core inversion-of-control