我们正在为ReSharper开发插件,我们想让我们的插件可扩展。似乎,我们应该使用ShellComponent属性来做,但我们找不到任何例子。任何人都可以介绍如何定义自定义扩展点以及如何管理扩展。扩展点和扩展实现的代码示例将非常有用。
感谢。
答案 0 :(得分:1)
如果您正在寻找可以扩展ReSharper的插件,则需要通过使用[ShellComponent]
或[SoutionComponent]
属性标记ReSharper来了解插件中的类。这些属性具有不同的生命周期 - 一个shell组件会持续ReSharper本身的生命周期,并且在解决方案关闭时打开并处理解决方案时会创建一个解决方案组件。
为了让ReSharper对您的组件做一些有用的事情,他们通常必须实现一个接口,例如ICodeCompletionItemsProvider
,有时必须使用不同的属性,例如[CodeCleanupModule]
(它本身来自ShellComponentAttribute
)。 ReSharper中有许多扩展点,适合你的扩展点取决于你要做的事情 - 重构,单元测试提供程序,代码清理,代码完成项等。devguide提供了一个很好的介绍更常见的扩展点。
但是如果你想让你自己的插件可扩展,那么你的组件需要使用一种提供者模式,将工作推迟到多个提供者实例。例如,代码清理通过推迟到多个代码清理模块来工作,每个代码清理模块负责清理代码的不同方面(空白,排序等)。为此,您的组件应该在构造函数中包含一组提供程序。 ReSharper的组件模型将自动创建这些类型的集合并将其传递给。更具体地说,你应该有一个带IEnumerable<T>
或IViewable<T>
的构造函数,其中T是你要定义和调用的提供者的接口。 IEnumerable<T>
将为您提供简单的提供程序集合,但IViewable<T>
表示可观察的集合,并允许您订阅组件模型中可用的新提供程序的通知。