【发布时间】:2019-08-08 10:14:31
【问题描述】:
我正在设置一个 ASP.NET Core 项目并遵循基于 Tripod 项目的工作的 CQRS 模式。我遵循了 Simple Injector 集成指南,但在某一点上有点困惑......我想继续使用 UseInMemoryDatabase 选项进行测试,并且只能使用 Core DI AddDbContext 方法找到示例。
我的 DbContext 实现了几个接口:
public class EntityDbContext : DbContext,
IUnitOfWork,
IReadEntities,
IWriteEntities
{
// code here
}
我在Startup.ConfigureServices 方法中这样做:
services.AddDbContext<EntityDbContext>(options => options.UseInMemoryDatabase("Snoogans"));
并在 Startup.Configure 方法中遵循 SI 集成指南:
container.Register<IUnitOfWork, xxxx>();
container.Register<IReadEntities, xxxx>();
container.Register<IWriteEntities, xxxx>();
我是否能够通过交叉线将核心注册到每个目标的插件,还是应该直接在 SI 中注册上下文?
== 我正在玩 Tripod 的原始概念:
var contextRegistration =
lifestyle.CreateRegistration<EntityDbContext, EntityDbContext>(container);
container.AddRegistration(typeof(EntityDbContext), contextRegistration);
container.AddRegistration(typeof(IUnitOfWork), contextRegistration);
container.AddRegistration(typeof(IWriteEntities), contextRegistration);
container.AddRegistration(typeof(IReadEntities), contextRegistration);
尝试使用 SI 做所有事情,但不确定我如何获得 3 个接口的注册:
container.Register<EntityDbContext>(() =>
{
var optionsBuilder =
new DbContextOptionsBuilder<EntityDbContext>().UseInMemoryDatabase("Snoogans");
return new EntityDbContext(optionsBuilder.Options);
});
container.AddRegistration<IUnitOfWork>(xxxx);
container.AddRegistration<IReadEntities>(xxxx);
container.AddRegistration<IWriteEntities>(xxxx);
【问题讨论】:
标签: c# asp.net-core dependency-injection entity-framework-core simple-injector