我可以为 Protobuf-net 设置一个全局对象工厂吗?
Posted
技术标签:
【中文标题】我可以为 Protobuf-net 设置一个全局对象工厂吗?【英文标题】:can I set a global object factory for Protobuf-net? 【发布时间】:2013-01-25 23:45:39 【问题描述】:我在 Protobuf-net 上看到了 SetFactory 方法。但是,它似乎是按类型提供的。 (还有 MethodInfo 还是字符串?我能听到 Func<T>
吗?)
我想要的是能够使用我的 IoC 容器的对象解析和构造能力进行所有反序列化。 (我正在使用 Autofac。) Protobuf-net 应该首先尝试在任何构造上使用我的 IoC。如果返回 null 那么我想要默认行为。目前有什么方法可以做到这一点吗?感谢您的宝贵时间。
【问题讨论】:
【参考方案1】:目前没有。它不接受委托的原因是它旨在静态编译模型 - MethodInfo 很好,但委托:不是那么多。但是,您提供的工厂方法可以采用序列化上下文,该上下文可以包含您需要的任何对象。
我可以考虑一个默认的工厂方法——这听起来可能;我需要让其中一个 args 成为 Type,但这不是问题。
设置“可以采用(如果需要)类型和序列化上下文的默认工厂 MethodInfo”的能力是否足够?
【讨论】:
@Brannon 在 r626 中提交,example/test here Marc,protobuf 似乎没有对明确添加到 RuntimeTypeModel 的类使用默认工厂。这意味着我不能使用 IOC 容器来解决它们。这是设计使然吗? @AntonioNakicAlfirevic 你的意思是用false
明确添加applyDefaultBehavior
吗?有趣 - 我将不得不考虑那里的 正确 行为是什么
好吧,我添加了一个 applyDefaultBehavior=true 的类和几个子类型。这些类型都不是由默认工厂创建的,但是如果我没记错的话,它们引用的类确实是由工厂方法创建的。我需要再次检查以 100% 确定。顺便提一句。 tnx 分享您的出色工作!以上是关于我可以为 Protobuf-net 设置一个全局对象工厂吗?的主要内容,如果未能解决你的问题,请参考以下文章
是否可以在 Silverlight 中使用 protobuf-net 对私有属性进行(反)序列化?
Protobuf-net 错误 - 序列化设置为 null 的固定数组
protobuf-net 不使用私有设置器序列化 C# 属性
我可以重复使用对象实例来避免使用 protobuf-net 进行分配吗?