J'ai besoin d'un objet pour mapper l'objet dans mon application. J'en ai essayé quelques-uns, mais je n'ai pas réussi à trouver quelque chose qui corresponde à mes besoins, alors j'écris le mien. Actuellement, j'ai une interface comme ci-dessous:C# objet basé sur les génériques à l'objet mapper question
public interface IMapper<T, R> {
T Map(R obj);
}
je mets en œuvre alors une AccountMapper qui associe un client à un compte que:
public class AccountMapper : IMapper<Account, Customer> {
Account Map(Customer obj) {
// mapping code
}
}
Cela fonctionne bien jusqu'à présent, mais j'ai plusieurs entités source qui cartographient à la même entité de destination. Par exemple, j'ai un paiement et une facture qui correspondent à BillHistory. Pour ce qui précède, je dois créer deux mappeurs distincts (BillHistoryPaymentMapper et BillHistoryInvoiceMapper), ce qui est très bien. Cependant, j'aimerais pouvoir l'implanter légèrement différemment comme ci-dessous. Le seul problème est que je ne sais pas si c'est possible et si c'est le cas, je ne connais pas la syntaxe correcte. Alors que la première mise en œuvre fonctionne bien, la seconde serait légèrement plus élégante. Est-ce possible et si oui, à quoi ressemblerait la syntaxe correcte?
modifier -------
Je déteste quand les gens font cela, mais bien sûr j'oublié de mentionner un petit détail. Nous avons une classe abstraite entre le mappeur et l'interface pour implémenter une logique commune à tous les mappeurs. Donc, ma signature mappeur est en fait:
public class BillHistoryMapper : Mapper<BillHistory, Invoice> {
}
où Mapper contient:
public abstract class Mapper<T, R> : IMapper<T, R> {
public IList<T> Map(IList<R> objList) {
return objList.ToList<R>().ConvertAll<T>(new Converter<T, R>(Map));
}
}
voir ci-dessus, le code ne s'affiche pas correctement dans le commentaire – Brian
Vous codez implémenter votre méthode Map en tant que méthode d'extension sur l'interface IMapper. De cette façon, vous n'avez pas besoin d'utiliser une classe de base abstraite. –
J'ai marqué ceci comme la réponse b/c il a répondu à ma question originale. J'ai également pu accomplir ceci sans un cours abstrait en utilisant la suggestion d'Eric. Merci!!! – Brian