Ich löse dieses Problem so: Injizieren von Abhängigkeitsfabriken. Lösen Sie in diesen Fabriken zuerst die Abhängigkeit auf, wenn sie im Container registriert ist, und "deserialisieren" Sie dann alle verbleibenden Daten: json.net ermöglicht das Auffüllen von Feldern in vorhandenen Objekten.
Da der Fabrikcode mit dem Verdrahtungscode des IoC-Containers einhergeht, container.Resolve
verstößt die Verwendung innerhalb der Fabrik meiner Meinung nach nicht gegen die Regel, container
die nur an einer Stelle im Code verwendet werden muss: wo die gesamte Verdrahtung stattfindet.
Ab sofort versuche ich, diesen Prozess mithilfe von Reflexion automatisch zu gestalten (im Gegensatz zu dem, bei dem ich diesen Ansatz getestet habe). Ja, es bleibt nicht viel von der Deserialisierung von json.net selbst übrig. Ein Teil davon wird durch benutzerdefinierten Code ersetzt, aber ich denke, warum sollte man sich darum kümmern?
Was waren Ihre letzten Gedanken / Entscheidungen in dieser Angelegenheit? Nachdem ich diesen Beitrag gelesen habe, sehe ich zwei Möglichkeiten: deserialisieren, dann injizieren; oder injizieren, dann deserialisieren (bevölkern). Und ich finde immer noch, dass mein Weg besser ist. Ich werde mich freuen, Argumente dagegen zu hören (ich bin der Meinung, dass mein Weg für meinen Fall vielleicht besser ist, kann mir aber keine guten alternativen Fälle vorstellen, in denen dies fehlschlägt, nur ein paar kleine Vermutungen).
This would eliminate the possibility of using Constructor injected DI
-- Warum? Sie können weiterhin parametrisierte Instruktoren haben, solange Sie einen Standardkonstruktor für Serialisierungszwecke einschließen (der Standardkonstruktor kann privat sein, wenn Sie möchten).