asp.net-core – 如何使用StructureMap注册表在单独的项目中配置
发布时间:2020-12-16 03:17:50 所属栏目:asp.Net 来源:网络整理
导读:我正在尝试在Visual Studio中设置一个解决方案,该解决方案将所有EF Core文件放在一个项目(Infrastructure)中,与我的ASP.NET Core Web项目分开.此外,我想防止开发人员意外地使用基础结构项目中的类型,因此我试图避免从Web到基础结构的引用.这可以在ASP.NET 5
我正在尝试在Visual Studio中设置一个解决方案,该解决方案将所有EF Core文件放在一个项目(Infrastructure)中,与我的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项目中?我已经在Infrastructure项目中有一个StructureMap注册表,所以如果有办法从那里连接所需的服务,它将有权访问DbContext类型,因为它在该项目中: public class InfrastructureRegistry : Registry { public InfrastructureRegistry() { For(typeof(IRepository<>)).Add(typeof(EfRepository<>)); } } 您可以在此分支中查看项目的当前状态: 我的目标是将项目引用从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的配置),你可以手动注册到structuremap. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- wcf – ASP.NET MVC中的OpenId身份验证是一项宁静的服务吗?
- 在ASP.NET中生成图像缩略图?
- 使用ASP.NET Core 2.0进行用户管理
- asp.net – IIS URL Rewrite:添加除.html和.aspx之外的尾部
- asp.net – 在内容页面的主页面上设置属性值
- asp.net – 配置转换和“TransformXml任务失败”错误消息
- asp.net-mvc – 将List参数传递到ASP.NET MVC3中的自定义操
- asp.net – 用户控制静态名称选项?
- asp.net – CollapsiblePanelExtender在初始页面加载时不会
- asp.net-mvc-3 – asp.net mvc 3抛出异常
推荐文章
站长推荐
- asp.net-mvc – 如何GetBytes()在C#与UTF8编码与
- .net – 在生产环境中应该使用’Integrated Secu
- asp.net-mvc – 如何在asp.net mvc视图中验证日期
- asp.net – 关于年龄验证的Cookie法
- asp.net – Windows 2012 SERVER – 为ADO.NET提
- DevExpress v17.2新版亮点—ASP.NET篇(三)
- asp.net-mvc-2 – ASP.NET MVC SiteMap
- ASP.NET MVC基于标注特性的Model验证:将Validat
- asp.net – 远程连接到WebDev.WebServer.exe
- 在asp.net ajax工具包中组合脚本
热点阅读