我有一个应用程序,其中我想提供编写插件的人(插件是通过实现基本接口,然后我加载.dll)。我想让他们有可能在现有数据库中创建设置并保存数据。我想这样做而不必为每个插件创建一个表 - 但如果它需要我愿意这样做。我提出了两个基本方案:
为插件提供一个接口,它可以获取一个Dictionary并将其序列化为xml并将其保存在我的数据库中。
插件必须包含在带有清单文件(我自己的发明)的.zip文件中,其中包含create sql脚本和表格的删除脚本。
第一种是对复杂数据类型的限制。第二个插件的复杂性更大,因为它需要在.zip文件中并解压缩等...
请就这些方案中的任何一种或替代方案提供建议。
干杯
答案 0 :(得分:2)
您的插件构造函数应该接收SettingRepository对象,该对象提供存储设置的方法并将其保存回来
public MyCustomPlugin(PluginId id, SettingsRepostiory settingsRepository)
{
_id = id;
_settingsRepository = settings;
}
public void SomePluginMethod()
{
PluginSettings setting = settingsRepository.Settings.WithId(_id);
//...
}
其中PluginSettings确实可以是一个字典,序列化为XML
答案 1 :(得分:1)
我对选项2有点犹豫,因为您授予第三方访问权,直接针对您的数据库编写SQL。但是,备选方案1似乎可行且安全。正如@Euphoric所说,如果你需要做更复杂的事情,你可以使用多个键。
答案 2 :(得分:0)
第一个方法看起来很好。如果应用程序想要保存复杂的配置,它可以将其保存为多个键或将一些复杂的配置对象序列化为字符串。
答案 3 :(得分:0)
这取决于插件的复杂程度。
如果pugins只需要设置,第一种方法是完美的。在这种情况下,我没有看到第一种方法的任何限制。 第二种方法没有任何新的东西。您可以获取数据结构中清单文件中的相同信息,并从插件接口方法中检索它。这很简单,因为您只管理dll文件。此外,如果文件非常复杂,您可以将其放在dll中的资源中。 在您的数据库中,您可以在表格中保存类似于:plugin_name_settingname,value到您用于所有插件的设置表中。
我曾经不得不支持一个插件机制,其中插件嵌入了他们自己的表。 在这种情况下,您可以在插件实现的接口方法中检索新的tabels模式和名称。然后,您需要在数据库中创建它。就像插件的绝缘。