是否可以使用AutoMapper来包装方法?

时间:2010-04-22 13:31:22

标签: .net interface automapper sealed

我有两个班级:

public class TestClass1
{
    public int TestInt { get; set; }

    public void TestMethod()
    {
        // Do something
    }
}

public class TestClass2
{
    public int TestInt { get; set; }

    public void TestMethod()
    {
        // Do something
    }
}

我想创建可以用于这两个类的接口。最简单的解决方案是在TestClass1和TestClass2上实现接口,但我不能访问这些类的实现(外部dll)。我想知道我是否可以创建新界面并使用AutoMapper将TestClass1和TestClass2映射到ITestInterface:

public interface ITestInterface
{
    int TestInt { get; set; }

    void TestMethod();
}

2 个答案:

答案 0 :(得分:1)

你说你需要将“TestClass1和TestClass2”映射到ITestInterface,但是你需要一个类的实例来映射,因为你不能创建一个接口的实例。

我假设你试图通过将它们转换为相同的接口来交替处理这些类。如果是这样,Automapper不是您应该关注的内容 - 请参阅此question on stack-overflow以获取有关如何管理类的一些详细信息,就好像它们都实现相同的接口一样(即使您无法访问源代码)码)。

答案 1 :(得分:1)

您无法将方法映射为目标,只能映射到(使用自定义投影):

Mapper.CreateMap<Source, Destination>()
.ForMember(dest => dest.SomeValue, 
        opt => opt.MapFrom(src => src.GetSomeValue()))

但绝对没有办法将void方法“映射”到另一个void方法。它没有意义;映射涉及从一个地方读取并且写入到另一个地方,并且您无法从void方法“读取”值。