Я разрабатываю программу на C#, которая должна выполнять различные запросы HTTP для получения различной информации (цена определенного товара в регионе, история цен для объекта, маршрут между двумя регионами и т. д.).Как передать различные параметры для разных классов запросов HTTP, которые реализуют один и тот же интерфейс
Я начал путем реализации интерфейса IRequest, который содержит два свойства, что все запросы должны иметь:
public interface IRequest
{
ReturnDataType DataReturnType { get; }
HttpWebRequest HttpRequest { get; }
}
public enum ReturnDataType
{
Xml,
Json
};
Я хотел бы добавить в этом интерфейсе список (или любой другой контейнер), который будет содержать параметры для запроса (для добавления в URL), чтобы я мог получить к ним доступ, ссылаясь на интерфейс IRequest. К сожалению, поскольку каждый HTTP-запрос необязательно имеет один и тот же запрос, и не обязательно в том же порядке, если они это делают, я не знаю, как этого добиться. Единственное решение, которое я придумал, состоит в том, чтобы в интерфейсе иметь List<String>
и полагаться на программиста, чтобы прочитать, что параметр x всегда должен быть первым в списке для http-запроса a, параметра y second и т. Д., Параметр z всегда сначала для http-запроса b и т. д.
Поскольку я, вероятно, буду только касаться этого кода, это, вероятно, не вызовет проблем в долгосрочной перспективе, но я бы хотел, тем не менее, использовать лучшее решение, если оно существует ,
У меня есть фабрика, которая создает соответствующий запрос и возвращает 'IRequest'. Если я сделаю следующее: «GetItemPriceRequest request = (GetItemPriceRequest) RequestFactory (GetItemPriceRequestString)», будет ли у меня доступ к «ItemNumber» и «UserName», если эти свойства уже заполнены? – Choub890
GetItemPriceRequestString - это имя класса? или что это? вы должны получить доступ к номеру товара и имени пользователя, пока вы делаете актерский состав – alsafoo
Извините, настоящая подпись для моей фабрики - это 'CreateApiRequest (ApiRequestType requestType)' где 'ApiRequestType' - это перечисление, указывающее, какой запрос мы хотим создать. Просто для подтверждения, если в конструкторе класса GetItemPriceRequest я заполняю значения «ItemNumber» и «UserName» со значениями, у меня будет доступ к этим значениям (как заполняется в конструкторе), даже если он возвращается с помощью «CreateApiRequest» (ApiRequestType requestType) 'как IRequest? – Choub890