C#如何使Sure扩展方法签名匹配?

时间:2017-12-14 23:44:08

标签: c# mapping extension-methods

public static class PersonPropertyMapper
{
    public static PeopleSearchBusinessLogic.DomainModels.Person ToDomainModel(this Entities.Person entity)
    {
        return new PeopleSearchBusinessLogic.DomainModels.Person()
        {
            Id = entity.Id,
            Name = entity.Name,
            Address = entity.Address,
            Age = entity.Age,
            Interests = entity.Interests,
            Picture = entity.Picture
        };
    }
}

正如你在这里看到的,我有一个带有扩展方法的类,它可以来回转换对象。在这种情况下,ToDomainModel方法是Entities.Person对象的扩展。

我的理解是,包含扩展方法的类不能从其他类派生或实现接口。但是,当我添加更多" PropertyMappers"我想要求所有这些类遵循相同的接口,以便方法名称在整个应用程序中是相同的。我觉得应该有一个简单的解决方案,但这不是我第一次遇到这个问题。

作为一个例子,让我们说我有一个Car对象,我需要创建一个CarPropertyMapper。现在,没有什么能阻止我将扩展方法命名为" ToCarDomainModel()"而不是标准" ToDomainModel"。

我希望有一个解决方案来解决这个难题,或者至少理解为什么我会以错误的方式解决这个问题。

或者,是否存在我忽略的映射对象(例如域模型和实体)的另一种解决方案?

1 个答案:

答案 0 :(得分:1)

扩展方法是静态类中的静态方法,当然它们不能实现接口或扩展其他类。但这并不是他们的正常使用。

对此的一些解决方案:

  • 接受这些是静态类的事实
  • 停止使用扩展方法并转向面向接口的设计
  • 使用AutoMapper等映射库