Использование WebApi из контроллеров Mvc — HttpClient или эталонная сборка API?

У меня есть решение с приложением MVC и веб-API. Они находятся в отдельных проектах и ​​доменах (с использованием CORS). Я создал его как веб-API, чтобы иметь возможность добавлять потребителей, но в настоящее время мое приложение MVC является единственным потребителем. Таким образом, я обсуждаю, использовать ли HttpClient внутри моего контроллера MVC или напрямую создавать экземпляр ApiController.

В любом случае я использую внедрение зависимостей (Autofac), поэтому я также хотел бы знать, как это настроить, потому что ни HttpClient, ни ApiController не имеют какого-либо интерфейса, который я могу внедрить через параметры конструктора, как обычно, поэтому я не уверен, как справиться с этим.

Какими должны быть области жизненного цикла внедренного экземпляра? HttpClient, вероятно, должен быть Singleton, поскольку не рекомендуется удалять его после каждого запроса.

ПРИМЕЧАНИЕ При вызовах API возвращаются большие наборы данных, используемые для заполнения диаграмм, поэтому я немного отказываюсь от HttpClient, так как чувствую, что при использовании Http возникнут дополнительные накладные расходы. Это антипаттерн для прямого создания экземпляра ApiController?

Спасибо


person parliament    schedule 06.04.2013    source источник
comment
Что не так с вашим старым вопросом?   -  person nemesv    schedule 07.04.2013
comment
Извините, это банкомат шоу-стопа, я не знаю, что делать дальше.   -  person parliament    schedule 07.04.2013
comment
Если создание экземпляра ApiController решит вашу проблему, почему бы вам не перенести логику из ApiController в отдельный класс службы и просто внедрить службу и использовать ее с обоих ваших контроллеров?   -  person nemesv    schedule 07.04.2013


Ответы (1)


Вы всегда можете сделать это

var httpClient = new HttpClient(new HttpServer(GlobalConfiguration.Configuration));

Это позволяет вам продолжать использовать HttpClient, но запросы передаются непосредственно на сервер WebApi без выполнения сетевых запросов. Таким образом, если вы позже решите отделить свой WebAPI, ваш клиентский код не изменится.

person Darrel Miller    schedule 07.04.2013
comment
Спасибо за ответ. Это выглядит как жизнеспособный вариант, но я хотел бы узнать больше об этом типе звонков. Можете ли вы рассказать больше или поделиться ссылкой, где я могу прочитать больше. Как я могу предотвратить создание экземпляров этих двух объектов по каждому запросу, я считаю, что их создание довольно дорого? И что вы имеете в виду под своим последним предложением, разве мой API уже не отдельный? - person parliament; 07.04.2013