【发布时间】:2011-03-01 22:00:21
【问题描述】:
我有一个 .net-app,它提供了一种使用插件扩展应用程序的机制。每个插件都必须实现一个插件接口,并且还必须提供一个接收一个参数(资源上下文)的构造函数。
在插件类的实例化过程中,我通过反射查看,如果需要的构造函数存在,如果存在,我实例化该类(通过反射)。如果构造函数不存在,我会抛出一个异常,指出无法创建插件,因为所需的构造函数不可用。
我的问题是,是否有办法在插件接口中声明构造函数的签名,以便实现插件接口的每个人也必须提供具有所需签名的构造函数。这将简化插件的创建。
我认为这种可能性不存在,因为我认为这样的功能不属于设计接口的主要目的,但也许有人知道这样做的语句,例如:
public interface IPlugin {
ctor(IResourceContext resourceContext);
int AnotherPluginFunction();
}
我想补充一点,我不想将构造函数更改为无参数,然后通过属性设置资源上下文,因为这会使插件的创建变得更加复杂。编写插件的人不是具有深厚编程经验的人。这些插件用于计算将由应用可视化的统计数据。
感谢大家的回答。
我决定让它成为一个接口,因为我不喜欢强迫插件程序员从抽象类继承,这样他或她就失去了从自己的基类继承的可能性。此外,从抽象类派生并不能确保插件程序员真正提供所需的构造函数。它使它变得更有可能(程序员仍然有可能只添加一个包含所需参数但也有其他参数的构造函数,这也很糟糕。请参阅 Ken Browning 的答案的 cmets)。
虽然我在帖子中提到我不想要这样的财产,但我将 Danny Varod 的答案标记为已接受,因为我认为在我的情况下这是最合适的解决方案。感谢所有回答的人。
【问题讨论】: