DI не работает, когда WebApi размещается в памяти в отдельной сборке - PullRequest
0 голосов
/ 24 января 2020

, так что в основном я пишу небольшое веб-приложение с использованием. net framework 4.8. Он работает нормально, и я подумал, что напишу также несколько интеграционных тестов. Итак, я создал отдельный проект, скажем, DummyTests. Затем я создаю хост в памяти и запускаю несколько запросов, таких как:

var client = new HttpClient(server);
var request = createRequest("api/user/all", "application/json", HttpMethod.Get);
using (HttpResponseMessage response = client.SendAsync(request).Result)
{
    //...
}

К сожалению, я всегда получаю сообщение об ошибке:

Произошла ошибка при попытке создать контроллер типа 'DummyController'. Убедитесь, что контроллер имеет конструктор publi c без параметров.

Настройка моего сервера:

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, но я хотел сохранить тесты в отдельной сборке. Есть идеи, что я делаю не так?

1 Ответ

0 голосов
/ 24 января 2020

Хорошо, я уже решил свою проблему. Во время тестирования я попытался разрешить одно из моих хранилищ из контейнера Unity. И я получил ошибку, что один из моих пакетов nuget не может быть загружен из-за несоответствия версий (отличается в тестовой сборке и в сборке WebApi). После того, как я это исправил, все работает нормально.

...