У меня есть несколько интерфейсов, которые могут реализовать мои объекты.Мне интересно, есть ли способ «каскадировать» один метод расширения в другой, используя то же имя метода.Я могу смотреть на все это неправильно, но вот пример:
public interface IBaseDto
{
int Id {get;set;}
string CreatedByFullName {get;set;}
}
public interface IDocumentDto
{
List<ContactDto> Subscriptions {get;set;}
}
public class ContactDto: IBaseDto
{
public int Id {get;set;}
public string CreatedByFullName {get;set;}
public string FirstName {get; set}
public string LastName {get;set;}
}
public class MeetingDto: IDocumentDto
{
public int Id {get;set;}
public string CreatedByFullName {get;set;}
public List<ContactDto> Subscriptions {get;set;}
}
Итак, допустим, я хочу преобразовать DTO в сущности, используя метод расширения.Примером может быть MeetingDto.ToEntity()
;
Я пытаюсь подумать, могу ли я написать часть метода расширения для IBaseDto
, другую для IDocumentDto
, а затем для каждой конкретной реализации только для своих собственныхсвойства.Когда я вызываю MeetingDto.ToEntity()
, он сначала запускает метод расширения собрания и вызывает версию IDocumentDto
, заполняет то, что ему нужно, а затем IDocumentDto
вызывает IBaseDto
.Я надеюсь, что это имеет смысл.
ОБНОВЛЕНИЕ:
Я придумал это, и это работает довольно хорошо:
public static TBaseDto ToEntity<TBridgeDto>(this TBaseDto dto) where TBaseDto: IBaseDto
{
...
return dto;
}
public static TDocumentDto ToEntity<TDocumentDto>(this TDocumentDto dto, IDocumentDto currentDto) where TDocumentDto : IDocumentDto
{
...
return dto.ToEntity();
}
public static MeetingDto ToEntity(this RfiDto dto)
{
...
return dto.ToEntity(dto)
}