Estoy resolviendo este problema así: inyectando fábricas de dependencias. En esas fábricas, primero resuelva la dependencia tal como está registrada en el contenedor, luego "deserialice" todos los datos restantes: json.net permite llenar campos en objetos existentes.
Como el código de las fábricas va junto con el código de cableado del contenedor de IoC, no creo que el uso container.Resolve
dentro de la fábrica viole la regla, que container
debe usarse solo en un lugar en el código: donde ocurre todo el cableado.
A partir de ahora, estoy tratando de hacer que este proceso sea automático (a diferencia de lo que he estado probando con ese enfoque) usando la reflexión. Sí, no queda mucho de lo que queda de la deserialización de json.net, parte de ella se sustituye con un código personalizado, pero creo que por qué molestarse.
Además, ¿cuál fue su opinión / decisión final sobre el asunto? Después de leer esta publicación, veo dos formas: deserializar, luego inyectar; o inyectar, luego deserializar (poblar). Y todavía encuentro que mi camino es mejor. Estaré encantado de escuchar argumentos en oposición a esto (estoy considerando que mi camino puede ser mejor para mi caso, pero no puedo imaginar vívidamente buenos casos alternativos, donde falla, solo algunas conjeturas menores)
This would eliminate the possibility of using Constructor injected DI
-- ¿Por qué? Todavía puede tener instructores parametrizados, siempre que incluya un constructor predeterminado para fines de serialización (el constructor predeterminado puede ser privado, si lo desea).