Я решаю эту проблему следующим образом: вводить фабрики зависимостей. На этих фабриках сначала разрешите зависимость, как она зарегистрирована в контейнере, а затем «десериализуйте» все оставшиеся данные: json.net позволяет заполнять поля в существующем объекте.
Поскольку код фабрики совпадает с кодом проводки контейнера IoC, я не думаю, что использование container.Resolve
внутри фабрики нарушает правило, которое container
должно использоваться только в одном месте кода: где происходит вся проводка.
На данный момент я пытаюсь сделать этот процесс автоматическим (в отличие от того, на котором я тестировал этот подход), используя рефлексию. Да, от самой десериализации json.net осталось немного, часть заменена пользовательским кодом, но я думаю, зачем это беспокоить.
Кроме того, каковы были ваши последние мысли / решения по этому вопросу? Прочитав этот пост, я вижу два пути: десериализовать, затем ввести; или ввести, затем десериализовать (заполнить). И я все еще считаю, что мой путь лучше. Будем рады услышать аргументы в противовес этому (я считаю, что мой путь может быть лучше для моего случая, но я не могу наглядно представить хорошие альтернативные случаи, когда он терпит неудачу, только некоторые незначительные предположения)
This would eliminate the possibility of using Constructor injected DI
-- Почему? У вас все еще могут быть параметризованные инструкторы, если вы включаете конструктор по умолчанию для целей сериализации (конструктор по умолчанию может быть закрытым, если хотите).