Внедрение зависимостей для параметров метода действия ASP.NET Web API
Я работаю над проектом ASP.NET Web API в C # для интерфейса JSON с мобильным приложением. Моя идея состояла в том, чтобы создать интерфейсы для всех запросов, а затем использовать только эти интерфейсы в коде Web API.
Я закончил с чем-то вроде этого:
public interface IApiObject {}
public interface IApiResponse : IApiObject where T : IApiObject {}
public interface IApiRegistrationRequest : IApiObject {}
Мой контроллер выглядит так:
public class MyApiController : ApiController
{
public IApiResponse Register(IApiRegistrationRequest request) {
// do some stuff
}
}
Мой проект Web API также содержит реализации этих интерфейсов.
Я предполагал, что проекты Web API используют привязку модели, как проекты MVC, поэтому я создалModelBinderProvider знает о наследовании для предоставления связывателя для всех IApiObjects и настраиваемого связывателя модели с использованием контейнера Unity для разрешения интерфейсов с их реализациями.
Однако после еще одного расследования я наткнулсяКак Web API выполняет привязку параметров и обнаружил, что Web API использует средства форматирования вместо связывателей моделей для сложных типов. В связанном посте блога рекомендуется использовать ModelBinderAttribute для моих параметров действия, но этот атрибут принимает только тип в качестве параметра. Однако мой пользовательский связыватель модели не содержит пустого конструктора (ему нужен контейнер для единства), поэтому мне нужно передать его экземпляр.
Другой способ, о котором я могу думать, - это использование внедрения зависимостей для средств форматирования. К сожалению, я не знаком с ними, так как никогда не использовал их раньше.
Какой правильный путь? И как мне это сделать?