gpt4 book ai didi

asp.net-core - 如何使用 StructureMap Registry 在单独的项目中配置 EF Core?

转载 作者:行者123 更新时间:2023-12-04 12:51:37 26 4
gpt4 key购买 nike

我正在尝试在 Visual Studio 中设置一个解决方案,该解决方案在一个项目(基础架构)中包含所有 EF Core 文件,与我的 ASP.NET Core Web 项目分开。此外,我想防止开发人员意外使用基础设施项目中的类型,因此我试图避免从 Web 到基础设施的引用。这在 ASP.NET 5/EF 6 中很容易完成,如下所述:
https://ardalis.com/avoid-referencing-infrastructure-in-visual-studio-solutions

然而,在 ASP.NET Core 中,我们在 web 项目的 Startup.ConfigureServices() 方法中配置 EF Core:

    public IServiceProvider ConfigureServices(IServiceCollection services)
{
string dbName = Guid.NewGuid().ToString();
services.AddDbContext<AppDbContext>(options =>
options.UseInMemoryDatabase(dbName));

services.AddMvc()
.AddControllersAsServices();

// use StructureMap
var container = new Container();
container.Configure(config =>
{
config.Scan(_ =>
{
_.AssembliesAndExecutablesFromApplicationBaseDirectory();
_.WithDefaultConventions();
_.LookForRegistries();
});

config.Populate(services);
});

return container.GetInstance<IServiceProvider>();
}

有没有办法移动 AddDbContext逻辑出 Startup并进入我的基础设施项目?我已经在 Infrastructure 项目中有一个 StructureMap 注册表,所以如果有办法从那里连接所需的服务,它将可以访问 DbContext 类型,因为它在该项目中:
public class InfrastructureRegistry : Registry
{
public InfrastructureRegistry()
{
For(typeof(IRepository<>)).Add(typeof(EfRepository<>));
}
}

您可以在此分支中查看项目的当前状态:
https://github.com/ardalis/cleanarchitecture/tree/ardalis/projectref

我的目标是删除从 Web 到基础结构的项目引用,但仍然让解决方案在启动时加载 AppDbContext。

最佳答案

您是否尝试手动添加到 Registry DbContextBuilder 中,如下所示:

例子:

public class InfrastructureRegistry : Registry
{
public InfrastructureRegistry()
{
string dbName = Guid.NewGuid().ToString();
var option = new DbContextOptionsBuilder();
var dbContextOptions = option.UseInMemoryDatabase(dbName).Options;
For<AppDbContext>().Use(t => new AppDbContext(dbContextOptions, t.GetInstance<IDomainEventDispatcher>()));
For(typeof(IRepository<>)).Add(typeof(EfRepository<>));
}
}

没有对此进行测试,但我认为如果您检查 AddDbContext 的作用(它使用的范围以及添加到 dbContextOptions 的配置),您可以手动将其注册到结构图。

关于asp.net-core - 如何使用 StructureMap Registry 在单独的项目中配置 EF Core?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46978844/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com