В моем API ASP.NET Core у меня есть класс DTO BaseBDto
и другой DerivedBDto
, который наследуется от него и скрывает некоторые из его свойств, потому что они требуются в DerivedBDto
. Свойства BaseBDto
и DerivedBDto
являются объектами других классов, BaseADto
и DerivedADto
соответственно, которые следуют той же логике, что и первые. У меня также есть BaseModel
класс, которому BaseBDto
и DerivedBDto
будут сопоставлены через другой класс Mapper
.
Что-то вроде следующего кода:
using System.ComponentModel.DataAnnotations;
public class BaseADto
{
public string Name { get; set; }
}
public class DerivedADto : BaseADto
{
[Required]
public new string Name { get; set; }
}
public class BaseBDto
{
public BaseADto A { get; set; }
}
public class DerivedBDto : BaseBDto
{
[Required]
public new DerivedADto A { get; set; }
}
public class BaseModel
{
public string NameModel { get; set; }
}
public static class Mapper
{
public static BaseModel MapToModel(BaseBDto dto) => new BaseModel
{
NameModel = dto.A.Name
};
}
Но оказывается, что при передаче объекта DerivedBDto
методу MapToModel
он пытается получить доступ к значениям BaseBDto
(которые равны null
) вместо DerivedBDto
.
Есть ли способ добиться такого поведения?
Я могу думать только об объявлении BaseBDto
абстрактным, но это помешает мне создать его экземпляр, что мне нужно сделать.
PS: я уже задавал аналогичный вопрос здесь, но я упростил мой образец кода, поэтому я решил, что нужен еще один вопрос. Кроме того, предоставленное там решение не работает, потому что я не могу переопределить свойство A в DerivedBDto
на DerivedADto
, поскольку оно должно иметь тот же тип, что и свойство A в BaseBDto
.
virtual
иoverride
, чтобы переключить ошибки компиляции. - person Luis Costa   schedule 22.01.2020