在不同命名空间下交替使用两个相同的classes/interfaces?

Use two identical classes/interfaces under different namespaces interchangeably?

我正在编写一个 Web 应用程序,我希望允许第 3 方开发人员编写 "plugins" 可以加载到应用程序中以修改标准行为的 Web 应用程序。

所以传统智慧建议有这样的东西:

public interface IPlugin {
    void Execute (IPluginContext context);
}

第三方开发人员然后可以实现该接口,随意使用上下文,然后将他们的代码注册到要执行的应用程序中(通常附加到某些消息和 pre/post 条件)。

我的问题是如何公开这些接口。最简单的事情似乎是创建一个 MyApplication.SDK 库,它只有接口和 类 我想公开。然而,这意味着我的主要应用程序需要引用这个库,所以 SDK 被用来构建应用程序,这听起来有点从后到前。

有没有办法在两个应用程序中都有一个 IPlugin 接口,并且让主 Web 应用程序使用 SDK 的 IPlugin 接口,就好像它是它自己的一样?因为它们是相同的?

当您构建可插件系统时,您想要向插件作者公开的接口和支持 类 是您与插件作者之间的合同。因此,您的应用程序及其插件引用同一个合约库是正确的。因此,您应该将插件架构的接口和支持 类 放入 SDK 库中。

此外,通过拥有 SDK 库,您可以稍后在新库中发布新版本,并可能支持多个版本的插件接口,这将允许您随着时间的推移发展该功能,同时保持向后兼容性。