【问题标题】:Is possible constructor injection using deserialization?是否可以使用反序列化进行构造函数注入?
【发布时间】:2023-03-10 20:51:02
【问题描述】:

关于以下代码:

var serializer = new XmlSerializer(typeof(MyPOCOType));
using (var reader = XmlReader.Create(fileName))
{
    var pocoInstance = (MyPOCOType)serializer.Deserialize(reader);
}

我正在使用ninject。

MyPOCOType 具有通过构造函数注入传递的依赖项。

MyPOCOType 的实例是由 Deserialize 方法创建的,所以没有提供依赖。

还有另一种方法可以做到这一点,而无需将状态与我的 MyPOCOType 分开并且不使用 [Inject] 属性? (仍在使用构造函数注入)

【问题讨论】:

  • 如何创建另一个接受 Xml 作为参数的构造函数,然后使用 IocContainer 创建实例,同时将 Xml 作为参数传递?
  • 不要尝试将依赖项注入数据对象:stackoverflow.com/questions/28715966/…

标签: c# serialization ninject inversion-of-control ioc-container


【解决方案1】:

XmlSerializer 不支持这个,并且没有用于外部构造的钩子。所以:不,基本上。

【讨论】:

  • @ViniciusGonçalves 不是真的,除非你知道一个替代但功能完整的 xml 序列化程序
  • 我使用的一种解决方法是在反序列化后立即使用属性注入。如果将反序列化步骤包装到抽象工厂中,则可以将容器注入工厂(类似于您在 IControllerFactory 中所做的)并调用 BuildUp 方法(或等效方法)以在返回实例之前注入属性。不是很漂亮,但至少它是可行的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多