如何为插件提供数据功能?

时间:2010-12-14 14:29:17

标签: c# architecture plugins

我有一个应用程序,其中我想提供编写插件的人(插件是通过实现基本接口,然后我加载.dll)。我想让他们有可能在现有数据库中创建设置并保存数据。我想这样做而不必为每个插件创建一个表 - 但如果它需要我愿意这样做。我提出了两个基本方案:

  1. 为插件提供一个接口,它可以获取一个Dictionary并将其序列化为xml并将其保存在我的数据库中。

  2. 插件必须包含在带有清单文件(我自己的发明)的.zip文件中,其中包含create sql脚本和表格的删除脚本。

  3. 第一种是对复杂数据类型的限制。第二个插件的复杂性更大,因为它需要在.zip文件中并解压缩等...

    请就这些方案中的任何一种或替代方案提供建议。

    干杯

4 个答案:

答案 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模式和名称。然后,您需要在数据库中创建它。就像插件的绝缘。