So ist die Grundidee war:Ist es möglich, Erweiterungsoperatoren in C# zu erstellen?
Wir haben einige Geschäftsmodell
public class Model
{
public int Foo { get; set; }
}
Und es ist Darstellung Ansicht Modell
public class ViewModel
{
public string Foo { get; set; }
public static explicit operator ViewModel(Model b)
{
// Map instances using AutoMapper or whatever
return new ViewModel { Foo = b.Foo.ToString() };
}
}
Unser Urinstinkt ist Modell abzubilden-Modell anzuzeigen. Wie man sehen kann ich will Mapping durchführen mit explicit operator
so konnte ich
var model = new Model { Foo = 42 }; // Get model
var viewModel = (ViewModel)model; // Map to view model
tun und deshalb so sauber wie möglich mein Controller-Code haben ... ABER Ich möchte View-Modell und Abbildungslogik bleiben getrennt werden. Wie kann ich explicit operator
Implementierung in eine externe Klasse verschieben? Ähnlich Erweiterungsmethoden:
public static class Extensions
{
public static explicit operator ViewModel(Model b)
{
// Map instances using Automapper or whatever
return new ViewModel { Foo = b.Foo.ToString() };
}
}
Dieser Code ist offensichtlich, nicht aus zwei Gründen Kompilieren:
- Statische Klassen keine benutzerdefinierten Operatoren
enthalten kann - entweder Parameter oder Rückgabetyp-Erweiterungen sein muss
auch als Option könnte ich view-Modell Teil und Split-Modell selbst und Betreiber zu trennen CS- Dateien machen, aber es wäre nicht den Fall machen. Architektonisch wären sie immer noch dieselbe Klasse im selben Namensraum. Ich möchte in der Lage sein, Mapping-Logik zum Beispiel in einem anderen Projekt in Lösung zu implementieren.
Ich möchte nur ähnlich wie Erweiterungsmethoden Wirkung erzielen. Wie kann ich das machen?
Eine Idee, die in den Sinn kommt, ist: Machen Sie Ihr ViewModel zu einer partiellen Klasse und Sie haben separate Dateien für das Mapping und das Modell selbst. – BitTickler
Ich bin zu 99.99% sicher, dass das mit Erweiterungsmethoden nicht möglich ist. Sie können eine partielle Klasse erstellen und einen normalen überladenen Operator haben, wenn Sie nur die Logik trennen möchten. – Rob
Das wäre schrecklich mit zu programmieren. Können Sie sich vorstellen, ob sich das Verhalten des Additionsoperators geändert hat, abhängig davon, auf welche Namespaces Sie verweisen? Hässlich! – Gusdor