2014-09-09 5 views
0

우리는 ReSharper 용 플러그인을 개발 중입니다. 우리는 플러그인을 확장 가능하게 만들고 싶습니다. 우리는 ShellComponent 특성을 사용해야 만하지만 예제를 찾을 수 없습니다. 아무도 사용자 정의 확장 점을 정의하는 방법과 확장을 관리하는 방법을 설명 할 수 있습니까? 확장 점 및 확장 구현 코드 예제는 매우 유용합니다.ReSharper 플러그인에서 사용자 정의 확장 점을 만드는 방법

감사합니다.

답변

1

ReSharper를 확장 할 수있는 플러그인을 작성하려면 ReSharper에 플러그인의 클래스에 대해 [ShellComponent] 또는 [SoutionComponent] 속성으로 표시해야합니다. 이러한 특성은 수명이 다릅니다. 쉘 구성 요소는 ReSharper 자체의 수명을 지속하며 솔루션을 닫을 때 솔루션을 열고 배치 할 때 솔루션 구성 요소가 만들어집니다.

는 일반적으로 (자체 ShellComponentAttribute에서 파생되는) 등 [CodeCleanupModule] 같은 다른 속성을 사용할 필요가 때로는 ICodeCompletionItemsProvider 등의 인터페이스를 구현하고 있고, ReSharper에서 당신의 구성 요소에 유용한 일을 할 수 있도록합니다. ReSharper에는 많은 확장 점이 있습니다. 리팩토링, 유닛 테스트 공급자, 코드 정리, 코드 완성 항목 등 여러분이하려는 것을 따라 달라집니다. devguide은 더 일반적인 확장 점.

그러나 고유 한 플러그인을 확장 가능하게하려면 구성 요소가 여러 공급자 인스턴스에 작업을 지연시켜 일종의 공급자 패턴으로 작동해야합니다. 예를 들어 코드 정리는 코드의 다른 부분 (공백, 순서 등)을 정리하는 여러 코드 정리 모듈을 연기하여 작동합니다. 이렇게하려면 구성 요소가 생성자의 공급자 컬렉션을 가져와야합니다. ReSharper의 컴포넌트 모델은 자동으로 이러한 유형의 콜렉션을 작성하여 전달합니다. 보다 구체적으로는 IEnumerable<T> 또는 IViewable<T>을 사용하는 생성자가 있어야합니다. 여기서 T는 정의하고 호출 할 공급자의 인터페이스입니다. IEnumerable<T>은 간단한 공급자 모음을 제공하지만, IViewable<T>은 관찰 가능한 컬렉션을 나타내며 구성 요소 모델에서 제공되는 새로운 공급자에 대한 알림을 구독 할 수 있습니다.

+0

안녕하세요 citizenmatt 답변을 보내 주셔서 감사합니다. 우리는 플러그인을 확장 가능하게 만들고 싶습니다. 자세한 내용을 제공해주십시오. 요점에서 확장 점을 정의하는 방법과 확장 점을 정의해야하는 방법. MyExtensionPoint를 설명하겠습니다. IViewable 을 취하는 생성자가 있어야합니다. 어떤 속성으로 표시해야합니까? 다음으로 확장을 정의 할 때 IMyExtension을 구현해야합니다. 확장 기능에 속성으로 표시해야합니까? – gsv

+0

예. 그거야. ReSharper는'[ShellComponent]'또는'[SolutionComponent]'로 표시된 모든 타입을 구성합니다. 만약 당신이'IViewable '을 가진 생성자 인자를 가지고 있다면,'T'를 구현하는 * 모든 * 구성 요소를 찾아서 여러분에게 줄 것입니다. 그래서'T' 클래스는 컴포넌트로 표시되어야하고,'T'는 누구나 구현할 수있는 공통 인터페이스 여야합니다. – citizenmatt