【问题标题】:challenges with .net generics and AutoMapper.net 泛型和 AutoMapper 的挑战
【发布时间】:2018-11-06 10:23:10
【问题描述】:

我下面有个界面

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; }
}

我为 UrlRecModel 类创建了一个 ViewModel。如何使用 AutoMapper 将 ViewModel 的通用扩展方法写入类,反之亦然。

这是我的视图模型

 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
}

【问题讨论】:

  • 我相信说“一个接口被一个类继承”是不合逻辑的。一个类只能“实现”一个接口,不能扩展它。只是一个快速的建议。
  • 谢谢指正
  • ViewModel 类的外观如何?您遇到的 AutoMapper 有什么问题?
  • 我进行了编辑以显示视图模型。你能帮忙吗?

标签: c# .net generics automapper viewmodel


【解决方案1】:

我已经创建了这两种扩展方法。

 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; }
}

【讨论】:

  • 这不起作用。然而,你给了我一些探索的想法。谢谢
猜你喜欢
  • 2015-10-28
  • 1970-01-01
  • 2019-12-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-25
相关资源
最近更新 更多