Можно ли использовать AutoMapper для переноса методов? - PullRequest
1 голос
/ 22 апреля 2010

У меня есть два класса:

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 ]

1 голос
/ 22 апреля 2010

Невозможно отобразить метод как target , только source (с использованием пользовательской проекции):

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

Но нет абсолютно никакого способа, которым вы можете "сопоставить" void метод с другим void методом. Это на самом деле не имеет смысла; отображение включает чтение из одного места и запись в другое, и вы не можете «прочитать» значение из метода void.

1 голос
/ 22 апреля 2010

Вы говорите, что вам требуется сопоставить «TestClass1 и TestClass2 с ITestInterface», однако вам потребуется экземпляр класса для сопоставления, поскольку вы не можете создать экземпляр интерфейса.

Я предполагаю, что вы пытаетесь обрабатывать классы взаимозаменяемо, преобразовывая их в один и тот же интерфейс. Если это так, то Automapper - это не то, на что вам следует обратить внимание - см. Этот вопрос о переполнении стека , чтобы узнать, как управлять обработками классов, как если бы они оба реализовали один и тот же интерфейс (даже если вы не не имеет доступа к исходному коду).

...