一种新的自动夹具。我正在 mvc web api 控制器上试用它。当我逐步完成时,容器(结构图)填充了依赖项,我看到 apicontroller 的构造函数运行并退出,然后我点击了我的 ContainerSpecimenBuilder (结构图提供实例的地方),它正在寻找我当然没有的 HttpContent在我的容器里。我以前从未听说过 HttpContent。我在想我只是在 ContainerSpecBuilder 上放一个过滤器。这似乎有点像黑客,但这是我现在得到的全部。
编辑
所以我在我的 ContainerSpecBuilder 上放置了一个过滤器 if !type.IsInterface (因为我真的只注入接口)并且它失败了,但我得到了同样的错误,除了它说 autofixture 无法创建 HttpContent。
再次编辑
好的,所以我创建了一个 FakeHttpContentSpecBuilder,这让我克服了这个问题,但现在我从 apicontroller 的其他方面得到了各种各样的悲痛。首先是 IDependencyResolver,现在是 IHttpRouteData。在我看来,要么我的容器不工作(尽管它的设置与生产完全相同),要么让 autofixture 创建 ApiController 的实例比我预期的要多得多。
我将继续在这里添加我的经验,如果有人对我的解决方案(黑客)感兴趣,请告诉我,我会发布它们。
并再次编辑
所以我删除了我在这里拥有的一堆类,并将它们全部(更简洁一点)放在GIST中。
我得到的错误是
StructureMap.StructureMapException:StructureMap 异常代码:202 没有为 PluginFamily System.Web.Http.Dependencies.IDependencyResolver、System.Web.Http、Version=4.0.0.0、Culture=neutral、PublicKeyToken=31bf3856ad364e35 定义默认实例
这实质上意味着 SM 在其容器中找不到 IDependency。然而,这段代码实际上在这个测试之外运行得很好,所以我发现这是错误的。此外,如果我在我的 SM 注册表中添加 IDependency 声明,我认为它只会移动到另一个基础设施错误 IhttpRouteData。
这似乎相当复杂,除了我希望我的容器为构造函数中的对象提供依赖关系之外,我没有任何投资。如果有更简单的方法,我很乐意使用它。
这就是我所拥有的
R