У меня есть несколько моделей с одинаковыми именами в разных пространствах имен, таких как:
A.Request
A.Response
B.Request
B.Response
et c
И у меня есть интерфейсы с общей подписью:
interface IA : Common
{
A.Response Do(A.Request);
}
interface IB : Common
{
B.Response Do(B.Request);
}
и я хочу создать общий интерфейс, которого будут придерживаться все интерфейсы:
interface ICommon
{
Response Do(Request);
}
Но, похоже, это не сработает, потому что он всегда будет пытаться дублировать методы, а не применять правила к Унаследованный интерфейс.
Я пытался использовать dynamic
или object
interface ICommon
{
dynamic Do(dynamic);
}
и даже пытался создать общий интерфейс для таких моделей, как:
A.Request : IRequest
A.Response : IResponse
B.Request : IRequest
B.Response : IResponse
interface ICommon
{
IResponse request Do(IRequest);
}
Но, похоже, ничего не работает.
Все, что я хочу - это иметь эти интерфейсы с одинаковой сигнатурой, реализуя один и тот же метод, но с моделями другого пространства имен, и я не могу найти способ сделать это. Возможно, интерфейсы не предназначены для наложения общих правил на унаследованные интерфейсы, поэтому я хочу найти способ сделать это.
Я хочу избегать использования обобщений, потому что уже пробовал это, и это не работает, потому что модели запечатаны, и вы не можете иметь правило where IRequest: A.Request
.
interface ICommon
{
Tresponse Do<TRequest,TResponse>(TRequest);
}
interface IA
{
A.Response Do<TRequest,TResponse>(A.Request) where TRequest: A.Request, TResponse: B.Response; <- not allowed
}