Я вирішую цю проблему так: впорскування фабрик залежностей. На цих заводах спочатку вирішують залежність, оскільки вона зареєстрована в контейнері, а потім "дезаріалізує" всі решта даних: json.net дозволяє заповнити поля в існуючому об'єкті.
Оскільки заводський код поєднується з кодом підключення контейнера IoC, я не думаю, що використання container.Resolve
всередині заводу порушує правило, яке container
потрібно використовувати лише в одному місці в коді: там, де відбувається вся електропроводка.
На сьогоднішній день я намагаюся зробити цей процес автоматичним (на відміну від того, на що я тестував цей підхід), використовуючи рефлексію. Так, не дуже багато того, що залишається від самої деріаріалізації json.net, частина її замінена спеціальним кодом, але я думаю, чому це турбує.
Також, якими були ваші остаточні думки / рішення з цього питання? Прочитавши цю публікацію, я бачу два способи: дезаріалізувати, потім ввести; або ввести, потім дезаріалізувати (заповнити). І я все-таки знаходжу свій спосіб краще. Буду радий почути аргументи на противагу цьому (я вважаю, що мій шлях може бути кращим для моєї справи, але я не можу наочно уявити хороші альтернативні випадки, де це не вдається, лише деякі незначні здогадки)
This would eliminate the possibility of using Constructor injected DI
- Чому? Ви все ще можете мати параметризованих інструкторів, якщо ви включаєте конструктор за замовчуванням для цілей серіалізації (конструктор за замовчуванням може бути приватним, якщо хочете).