在不同命名空间下交替使用两个相同的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 库,您可以稍后在新库中发布新版本,并可能支持多个版本的插件接口,这将允许您随着时间的推移发展该功能,同时保持向后兼容性。
我正在编写一个 Web 应用程序,我希望允许第 3 方开发人员编写 "plugins" 可以加载到应用程序中以修改标准行为的 Web 应用程序。
所以传统智慧建议有这样的东西:
public interface IPlugin {
void Execute (IPluginContext context);
}
第三方开发人员然后可以实现该接口,随意使用上下文,然后将他们的代码注册到要执行的应用程序中(通常附加到某些消息和 pre/post 条件)。
我的问题是如何公开这些接口。最简单的事情似乎是创建一个 MyApplication.SDK
库,它只有接口和 类 我想公开。然而,这意味着我的主要应用程序需要引用这个库,所以 SDK 被用来构建应用程序,这听起来有点从后到前。
有没有办法在两个应用程序中都有一个 IPlugin 接口,并且让主 Web 应用程序使用 SDK 的 IPlugin 接口,就好像它是它自己的一样?因为它们是相同的?
当您构建可插件系统时,您想要向插件作者公开的接口和支持 类 是您与插件作者之间的合同。因此,您的应用程序及其插件引用同一个合约库是正确的。因此,您应该将插件架构的接口和支持 类 放入 SDK 库中。
此外,通过拥有 SDK 库,您可以稍后在新库中发布新版本,并可能支持多个版本的插件接口,这将允许您随着时间的推移发展该功能,同时保持向后兼容性。