2010-04-22 21 views
1

J'ai deux classes:Est-il possible d'utiliser AutoMapper pour emballer les méthodes?

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

Je veux créer une interface que je peux utiliser pour les deux classes. La solution la plus simple consiste à implémenter l'interface sur TestClass1 et TestClass2 mais je n'ai pas accès à l'implémentation de ces classes (dll externe). Je me demandais si je peux créer une nouvelle interface et utiliser AutoMapper pour cartographier TestClass1 et TestClass2 à ITestInterface:

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

    void TestMethod(); 
} 

Répondre

1

Vous dites que vous avez besoin mapping « TestClass1 et TestClass2 à ITestInterface », mais vous auriez besoin d'une instance d'une classe pour mapper à car vous ne pouvez pas créer une instance d'une interface.

Je suppose que vous essayez de traiter les classes de façon interchangeable en les convertissant à la même interface. Si Automapper n'est pas ce que vous devriez regarder - voir ce question on stack-overflow pour plus de détails sur la façon de gérer traiter les classes comme si elles implémenteraient toutes les deux la même interface (même si vous n'avez pas accès au code source).

+0

Merci, ça résout mon problème. –

1

Vous ne pouvez pas mapper une méthode comme cible, seule la source de (en utilisant une projection personnalisée):

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

Mais il n'y a absolument aucun moyen que vous pouvez "mapper" une méthode void à une autre méthode void. Cela n'a pas vraiment de sens. Mappage implique lecture d'un endroit et écrit à un autre, et vous ne pouvez pas "lire" une valeur d'une méthode void.

+0

Vous avez raison, je ne peux pas mapper la valeur vide à la valeur vide, mais je ne suis pas intéressé par la valeur de retour. Je voudrais cartographier l'exectution de la méthode. Quelque chose comme: Mapper.CreateMap .ForMember (dest => dest.DoSomething(), opt => opt.MapFrom (src => src.DoSomething()). –

+0

@Woj: Alors vous ne parlez pas En ce qui concerne la cartographie, vous parlez d'un wrapper ou d'un adaptateur: http://en.wikipedia.org/wiki/Adapter_pattern Seules les * données * peuvent être * mappées *. – Aaronaught