0

我们正在为 ReSharper 开发插件,我们希望使我们的插件可扩展。看来,我们应该使用 ShellComponent 属性来做到这一点,但我们找不到任何例子。任何人都可以考虑如何定义自定义扩展点以及如何管理扩展。扩展点和扩展实现的代码示例将非常有帮助。

谢谢。

4

1 回答 1

1

如果您要编写一个可以扩展 ReSharper 的插件,您需要通过使用[ShellComponent]or[SoutionComponent]属性标记它们来告诉 ReSharper 您插件中的类。这些属性具有不同的生命周期 - 外壳组件持续 ReSharper 本身的生命周期,解决方案组件在解决方案打开时创建,在解决方案关闭时处置。

为了让 ReSharper 对您的组件做一些有用的事情,它们通常必须实现一个接口,例如ICodeCompletionItemsProvider,有时还必须使用不同的属性,例如[CodeCleanupModule](它本身派生自ShellComponentAttribute)。ReSharper 中有许多扩展点,适合您的扩展点取决于您要执行的操作 - 重构、单元测试提供程序、代码清理、代码完成项等。开发指南很好地介绍了更常见的扩展点。

但是如果你想让你自己的插件可扩展,那么你的组件需要使用一种提供者模式,通过将工作推迟到多个提供者实例。例如,代码清理通过推迟到多个代码清理模块来工作,每个模块负责清理代码的不同方面(空格、排序等)。为此,您的组件应在构造函数中接收一组提供程序。ReSharper 的组件模型将自动创建这些类型的集合并将它们传递给。更具体地说,您应该有一个带有IEnumerable<T>or的构造函数IViewable<T>,其中 T 是您要定义和调用的提供者的接口。将为您提供一个简单的IEnumerable<T>提供者集合,但是IViewable<T>表示一个可观察的集合,并允许您订阅从组件模型中获得新提供者的通知。

于 2014-09-10T08:40:43.570 回答