проблемы с дженериками .net и AutoMapper - PullRequest
0 голосов
/ 06 ноября 2018

у меня интерфейс ниже

public interface IEntity<T>
{
     T Id { get; set; }
    DateTime Created { get; set; }
    DateTime Updated { get; set; }
    [Timestamp] byte[] RowVersion { get; set; }

}

Этот интерфейс был реализован классом

  public partial class UrlRec: IEntity<Int64>
{
    public int EntityId { get; set; } 
    public string EntityName { get; set; }
    public string Slug { get; set; }
    public bool IsActive { get; set; }
    public int LanguageId { get; set; }
    public long Id { get; set; }
    public DateTime Created { get; set; }
    public DateTime Updated { get; set; }
   [Timestamp] public byte[] RowVersion { get; set; }
}

Я создал ViewModel для класса UrlRecModel. Как мне написать универсальный метод расширения для ViewModel для класса и наоборот, используя AutoMapper.

вот моя модель представления

 public partial class UrlRecordModel : BaseIbileHubEntityModel
{
    #region Properties

    [IbileHubResourceDisplayName("Admin.System.SeNames.Name")]
    public string Name { get; set; }

    [IbileHubResourceDisplayName("Admin.System.SeNames.EntityId")]
    public int EntityId { get; set; }

    [IbileHubResourceDisplayName("Admin.System.SeNames.EntityName")]
    public string EntityName { get; set; }

    [IbileHubResourceDisplayName("Admin.System.SeNames.IsActive")]
    public bool IsActive { get; set; }

    [IbileHubResourceDisplayName("Admin.System.SeNames.Language")]
    public string Language { get; set; }

    [IbileHubResourceDisplayName("Admin.System.SeNames.Details")]
    public string DetailsUrl { get; set; }

    #endregion
}

1 Ответ

0 голосов
/ 06 ноября 2018

Я создал эти два метода расширения.

 public static IEntity<T> ToModel<T>(this IEntityViewModel<T> viewModel)
    {
        return (IEntity<T>)Mapper.Map(viewModel, viewModel.GetType(), typeof(IEntity<T>));
    }

    public static IEntityViewModel<T> ToViewModel<T>(this IEntity<T> entity)
    {
        return (IEntityViewModel<T>)Mapper.Map(entity, entity.GetType(), typeof(IEntityViewModel<T>));
    }

и я использовал это здесь.

IEntityViewModel<Int64> entityViewModel = urlRec.ToViewModel<Int64>();
        IEntity<Int64> entity = entityViewModel.ToModel<Int64>();

Я не знаю, как выглядит ваша модель представления, поэтому я создал одну тестовую модель представления и интерфейс.

 public interface IEntityViewModel<T>
{
    T Id { get; set; }
    DateTime Created { get; set; }
    DateTime Updated { get; set; }
    byte[] RowVersion { get; set; }

}

public class UrlRecViewModel : IEntityViewModel<Int64>
{
    public int EntityId { get; set; }
    public string EntityName { get; set; }
    public string Slug { get; set; }
    public bool IsActive { get; set; }
    public int LanguageId { get; set; }
    public long Id { get; set; }
    public DateTime Created { get; set; }
    public DateTime Updated { get; set; }
    public byte[] RowVersion { get; set; }
}
...