我正在为第三方应用程序编写一组插件,这些插件实现为.NET库并在应用程序启动时加载,因此它们都在同一个应用程序域中。其中一个库是其他人使用的实用程序类和扩展方法的集合(包括其他人编写的插件,因此这基本上是一个元库)。
问题是:在实用程序库中有一个初始化代码,允许设置插件标题等内容;显然,应该按客户端设置,即在这种情况下按库。当然,这不能使用静态配置类来实现,因为在域中只有它的单个实例。
我也不允许在其他插件中动态地将此库加载到单独的域中;这将是对记忆的浪费,这是一个值得关注的问题。
问题:
答案 0 :(得分:1)
我不确定我是否正确理解了这个问题,但您似乎建议有一个应用程序在启动时加载插件dll。您(应用程序开发人员和潜在的插件开发人员)希望提供一个具有实用程序功能的静态类,插件可以使用,而无需为每个插件“重新创建轮子”。以下是我的评估(基于以上理解)
修改强>
让我对上面指定的第3种方法进行一些扩展:
您可以使用类来代表您的插件配置,如下所示,或者您可以获得更高级的。
class PluginConfiguration {
public string PluginName {get; private set;} // This represents a property that all plugins share i.e. well known properties
// all the configurations "private" to the plugin can go here
// You might want to use some XmlDocument or a different data structure for this purpose
public Dictionary<string,string> ConfigItems {get; private set;}
public PluginConfiguration(string configFile) {
// Load the configuration from the config file
}
}
现在,您的实用程序库可以传递参数或返回PluginConfiguration
类型的数据,并帮助您集中插件的所有重复代码