Automap mellem 2 interfaces
Hejsa.Teoretisk spørgsmål. Jeg har en fungerende løsning, men vil høre om nogle kender til en smartere måde at gøre dette på.
1. Jeg bruger Unity som IoC Container i mit projekt.
2. Jeg bootstrapper implementeringerne af forskellige interfaces når applikationen starter. Så mit framework/Busniss logic projekt ved intet om konkrete implementeringer. Det opererer 100% via interfaces.
3. Mit issue er så at jeg har 2 forskellige interfaces.
Forsimplet eksempel kunne være :
Interface IProduct
string Title { get; set; }
string Text { get; set; }
string Price { get; set; }
Interface IExtendedProduct
string Title { get; set; }
string Text { get; set; }
string WithoutTaxPrice { get; set; }
string WitTaxPrice { get; set; }
Jeg har så en kontrol i min applikation, hvis datakilde kan tage en liste af IProduct.
Men jeg vil gerne føde kontrollen med en liste af IExtendedProduct som jeg har trukket ud af min database f.eks.
Igen, dette er kun et eksempel. Men jeg kender ikke den konkrete implementation af disse to interfaces. Det kunne være hvad som helst, og bestemmes uden for context af mit framework.
Derfor har jeg brug for at konvertere mine entities fra IExtendedProduct til Iproduct.
Det gør jeg idag via en helper metode. Mit spørgsmål er som om der ikke findes et ud af boksen framework eller noget andet som kan automappe mellem 2 interfaces i .net eller som 3. parts framework?
Til Sitecore, som jeg arbejder med meget, bruger jeg et framework kaldet GlassMapper. Det virker fint dertil og sparer en for meget arbejde. Så tænker at der vel næsten også må findes noget lign. til ren .net mapning mellem klasse eller interfaces?
Min nuværende helper metoder ser ud som herunder. Forestil jer så at der er 50 properties, hvor 40 af dem hedder det samme, mens kun 10 er forskellige. Det virker lidt tåbeligt at man manuelt skal sidde og mappe 40 felter, som en automapper sagtens kunne have gjort for en, (hvis sådan en altså findes).
public static List<IProduct> ConvertToIresultItemCollection(List<IExtendedProduct> sourceList)
{
var result = new List<IProduct>();
foreach (var product in sourceList)
{
var resultItem = IoCHelper.Resolve<IProduct>();
resultItem.Title = product.Title;
resultItem.Text = product.Text;
resultItem.Price = product.WithoutTaxPrice;
result.Add(resultItem);
}
return result;
}
Mvh.
Lasse