【发布时间】:2017-07-06 03:12:25
【问题描述】:
我有一个插件系统,插件本身可以有多个运行时实例。这些实例是使用配置对象定义的,该对象通过各种 API 提供给插件本身。
配置包含父应用程序可以理解的特定部分,但插件需要通过子类化指定自己的部分。
[Serializable]
public class PluginConfiguration {
public string Name { get; set; }
}
public class MyPluginConfiguration : PluginConfiguration {
public string AccessToken { get; set; }
}
这部分是技术原因,因为它允许主应用程序将整个对象序列化为 JSON/XML/等。存入数据库以持久化通用配置和插件特定配置。
每个插件都托管在自己的 AppDomain 中。但是,当我尝试从主应用程序域和插件读取插件配置时遇到了麻烦(MarshalByRefObject 返回其 MyPluginConfiguration 对象实例。
有没有办法在基类中做一些序列化魔术来确保对象实例被序列化为PluginConfiguration 实例?序列化MyPluginConfiguration 实例的问题是:
- 自定义配置类型可能不是
[Serializable] - 即使他们是
[Serializable],他们也不会在主应用程序域中加载他们的程序集。
理想情况下,我希望实现仅限于 PluginConfiguration 基类。旧的 [Serializable] 语义和 AppDomains 不是 .Net 中最常见的概念,如果插件开发人员不需要处理这些方面,我想隐藏其中的一些方面。
【问题讨论】:
标签: c# .net serialization appdomain remoting