Asp.net mvc 5 如何使用StructureMap、MVC 5和WebApi 2注册每个请求的依赖关系?

Asp.net mvc 5 如何使用StructureMap、MVC 5和WebApi 2注册每个请求的依赖关系?,asp.net-mvc-5,entity-framework-6,asp.net-web-api2,structuremap,Asp.net Mvc 5,Entity Framework 6,Asp.net Web Api2,Structuremap,我有一个Mvc5-WebApi2应用程序,它使用StructureMap.Mvc5和StructureMap.WebApi2 Nuget包使用StructureMap进行依赖注入。我想为MVC和Web控制器向HttpContext生命周期注册EF 6 DbContext。有人能给我简单解释一下如何在MVC和WebApi中实现这一点吗?通常,如何在每个请求容器中注册某些依赖项,在父容器中注册其他依赖项?建议使用HttpContext绑定生命周期的方法是利用StructureMap的 其工作原理是:

我有一个Mvc5-WebApi2应用程序,它使用StructureMap.Mvc5和StructureMap.WebApi2 Nuget包使用StructureMap进行依赖注入。我想为MVC和Web控制器向HttpContext生命周期注册EF 6 DbContext。有人能给我简单解释一下如何在MVC和WebApi中实现这一点吗?通常,如何在每个请求容器中注册某些依赖项,在父容器中注册其他依赖项?

建议使用
HttpContext
绑定生命周期的方法是利用StructureMap的

其工作原理是:配置StructureMap容器,然后创建容器的嵌套实例,并在请求开始时将其存储在
HttpContext
中,并在整个HttpRequest中使用该容器,然后在结束时处理它()

您可以自己设置(),也可以使用这两个NuGet软件包为您设置:

一旦设置好,您就可以注册您的
DbContext
以正常方式:

this.For<DbContext>.Use(new DbContext(connectionString));
this.For.Use(newdbcontext(connectionString));

我希望这有帮助。如果您有任何问题,我会尽力帮助您。

如果您可以访问Pluralsight,在这段精彩的视频中会有一个关于StructureMap和EF的部分:是的,我是通过在我的上下文中添加调试语句自学的,但文档确实可以更明确。简单的回答是,这两个Nuget包都在每个请求容器中创建了所有内容,因此即使是自动连接的依赖项也会被处理掉。我的部分问题来自MVC5包说它不适用于WebApi,所以我不确定它们是否共享相同的容器/依赖项。是的。耶。很好。谢谢@JosephWoodward!现在我明白了!我对这种习惯于旧式结构图的新思维方式感到困惑,这篇文章让我头脑清醒了。