C# 当WebApi托管在单独程序集中的内存中时,DI不起作用

C# 当WebApi托管在单独程序集中的内存中时,DI不起作用,c#,asp.net-mvc,asp.net-web-api,unity-container,C#,Asp.net Mvc,Asp.net Web Api,Unity Container,所以基本上我是在用.NETFramework 4.8编写小型WebAPI应用程序。它工作得很好,我想我还将编写一些集成测试。所以我创建了一个单独的项目,比如说DummyTests。然后我创建内存主机并运行一些请求,如: var client = new HttpClient(server); var request = createRequest("api/user/all", "application/json", HttpMethod.Get); using (HttpResponseMes

所以基本上我是在用.NETFramework 4.8编写小型WebAPI应用程序。它工作得很好,我想我还将编写一些集成测试。所以我创建了一个单独的项目,比如说DummyTests。然后我创建内存主机并运行一些请求,如:

var client = new HttpClient(server);
var request = createRequest("api/user/all", "application/json", HttpMethod.Get);
using (HttpResponseMessage response = client.SendAsync(request).Result)
{
    //...
}
不幸的是,我总是出错:

尝试创建“DummyController”类型的控制器时出错。确保控制器具有无参数公共构造函数

我的服务器设置:

var config = new HttpConfiguration();
config.Routes.MapHttpRoute(name: "Default", routeTemplate: "{controller}/{action}/{id}", defaults: new { id = RouteParameter.Optional });
config.IncludeErrorDetailPolicy = IncludeErrorDetailPolicy.Always;

WebApiConfig.Register(config);
RouteConfig.RegisterRoutes(RouteTable.Routes);

var unityContainer = new UnityContainer();
config.DependencyResolver = new UnityDependencyResolver(unityContainer);
Core.UnityConfig.RegisterComponents(unityContainer);

server = new HttpServer(config);
如您所见,我还将DI分配给我的配置对象


它只在我将测试移动到WebApi所在的同一个项目时起作用,但我希望将测试保留在单独的程序集中。知道我做错了什么吗?

好的,我已经解决了我的问题。在测试期间,我试图从unity容器中解决我的一项职责。由于版本不匹配(测试程序集和WebApi程序集中的版本不同),我的一个nuget包无法加载。我修好后,一切正常

我没有听说过与程序集相关的DI容器问题。测试运行时是否执行了容器配置代码(服务器设置)?@oleksa即Unity(如本例中所示)不会自动从其他程序集中拾取
内部
类。。。但是要解决这篇文章中描述的问题,你可能需要…@AlexeiLevenkov,这不应该是个问题。服务器程序集中的DI配置代码肯定可以访问服务器程序集中的所有内部类。但是在测试内存中的服务器之前,必须执行服务器DI配置代码。