一个简单的问题:我了解C#中的序列化需要默认构造函数。这将消除使用构造函数注入的DI的可能性(在我的阅读中,通常是DI的首选样式[需要引用])。那么,这真的是一种非此即彼的情况,还是我错过了一些东西?
(附带问题):IoC容器是否以某种方式回避了这种折衷方案?
一个简单的问题:我了解C#中的序列化需要默认构造函数。这将消除使用构造函数注入的DI的可能性(在我的阅读中,通常是DI的首选样式[需要引用])。那么,这真的是一种非此即彼的情况,还是我错过了一些东西?
(附带问题):IoC容器是否以某种方式回避了这种折衷方案?
Answers:
我正在解决这样的问题:注入依赖项工厂。在这些工厂中,首先解析在容器中注册的依赖项,然后“反序列化”所有剩余数据:json.net允许填充现有对象中的字段。
当工厂代码与IoC容器的布线代码一起使用时,我认为container.Resolve
在工厂内部使用不会违反该规则,该规则container
必须在代码中的一个地方使用:所有布线都在其中进行。
到目前为止,我正在尝试使用反射使此过程自动化(与我一直在测试的方法相反)。是的,json.net反序列化本身没有什么剩余,它的一部分被自定义代码替代,但是我认为,为什么要打扰。
另外,您对此事的最终想法/决定是什么?看完这篇文章后,我看到两种方法:反序列化,然后注入;或注入,然后反序列化(填充)。而且我仍然发现自己的方法更好。很高兴听到反对的说法(我认为,我的方法可能对我的情况更好,但无法生动地想象好的替代情况,如果失败,仅需一些小小的猜测)
This would eliminate the possibility of using Constructor injected DI
-为什么呢?只要您包括用于序列化目的的默认构造函数(如果愿意,默认构造函数可以是私有的),您仍然可以使用参数化的讲师。