ich zwei sehr einfache Objekte haben:Individuelle Mapping mit AutoMapper
public class CategoryDto
{
public string Id { get; set; }
public string MyValueProperty { get; set; }
}
public class Category
{
public string Id { get; set; }
[MapTo("MyValueProperty")]
public string Key { get; set; }
}
Bei der Zuordnung einer Category
zu einem CategoryDto
mit AutoMapper, ich möchte folgendes Verhalten:
Die Eigenschaften sollten wie üblich abgebildet werden, außer denen, die das MapTo
Attribut haben. In diesem Fall muss ich den Wert des Attributs lesen, um die Zieleigenschaft zu finden. Der Wert der source -Eigenschaft wird verwendet, um den Wert zu finden, der in die Zieleigenschaft (mit Hilfe eines Wörterbuchs) injiziert werden soll. Ein Beispiel dafür ist immer besser, dass 1000 Worte ...
Beispiel:
Dictionary<string, string> keys =
new Dictionary<string, string> { { "MyKey", "MyValue" } };
Category category = new Category();
category.Id = "3";
category.Key = "MyKey";
CategoryDto result = Map<Category, CategoryDto>(category);
result.Id // Expected : "3"
result.MyValueProperty // Expected : "MyValue"
Die Key
Eigenschaft wird die MyValueProperty
(über das Attribut MapTo
) abgebildet, und der zugewiesene Wert ist „MyValue“, weil die Quelleigenschaftswert ist "MyKey", der (über ein Wörterbuch) "MyValue" zugeordnet wird.
Ist dies mit AutoMapper möglich? Ich brauche natürlich eine Lösung, die bei jedem Objekt funktioniert, nicht nur bei Category/CategoryDto.
Warum müssen Sie die Attribute Im ersten Schritt können Sie benutzerdefinierte Zuordnungen einrichten und den Eigenschaftsschlüssel auf Wert setzen. Ist das möglich? – whymatter
Ich möchte eine generische Mapper erstellen, die ich überall verwenden kann ... dann könnte ich jede Entität zu jedem dto ohne zusätzlichen Code zuordnen ... – Bidou
Imho Sie machen Ihre Entität verantwortlich für etwas, für das es nicht verantwortlich sein sollte. Das Ansichtsmodell sollte definieren, wo es die Daten erhalten soll, die es benötigt, um sich selbst zu konstruieren, und nicht umgekehrt. – Peter