2017-02-03 15 views
0

문제 : 테이블/열/관계를 입력 할 수있는 EF 모델 생성기와 유사한 도구를 만들면 모델 클래스가 생성됩니다. Visual Studio에 플러그인하여 DTE (개발 도구 환경)으로 VSIX에서 실행합니다.VSIX DTE - 부분으로 표시된 클래스 만들기

속성을 가진 추상 클래스를 성공적으로 만들었습니다. 이제 추상 클래스에서 상속 받게 될 동일한 파일에 다른 클래스를 만들고 싶습니다. 또한 partial으로 표시됩니다. 어떤 부분으로 클래스를 표시하는 방법을 잘 모르겠다. IntelliSence은 적절한 방법/속성을 제공하지 않으며 Google/SO/MSDN에서 검색 할 때 어떤 관련 결과도 제공하지 않습니다.

일부 코드

은 아이디어를 얻을 수 있습니다 :

ProjectItem File = CreateOrFindClassFile(/*params*/); //Creating project file    
if (File != null) 
{ 
    var NS = File.FileCodeModel.AddNamespace("ABC"); //Added namespace ABC 

    string ChildClassName = "Xyz"; 
    string BaseClassName = "XyzBase"; 


    //Generate base abstract class 
    var BaseClass = NS.AddClass(BaseClassName); 
    if (BaseClass != null) 
    { 
     BaseClass.Access = vsCMAccess.vsCMAccessPublic; 
     BaseClass.IsAbstract = true; 

     //some methods to add variables/methods/properties 
    } 


    //Generate partial child class 
    var ChildClass = lNamespace.AddClass(ChildClassName); 
    if (ChildClass != null) 
    { 
     ChildClass.Access = vsCMAccess.vsCMAccessPublic; 
     ChildClass.AddBase(lBaseClassName); 

     //TODO: add some code to mark as partial 
    } 
} 

질문 :partial으로 클래스를 표시하는 (DTE 클래스 트리를 통해)은 OOP의 방법이 있나요?

또는 내가 캐릭터 라인으로 클래스를 작성하도록 강요 오전 :

NS.GetStartPoint(..) 
    .CreateEditPoint() 
    .Insert("public partial class Xyz : XyzBase\n{\n}\n"); 

참고 : 그것은 작동하지만이 클래스 제어 및 OOP 방식을 잃어버린거야.

EDIT1 : 그냥 EnvDTE partial class keyword

답변

1

에 대한 몇 가지 참조를 찾을 수 ChildClass-EnvDTE80.CodeClass2 다음이 다음과 같은 속성을 사용 캐스팅보십시오 :이 속성은 개체 브라우저에 숨겨져있을 수 있음을

((EnvDTE80.CodeClass2)ChildClass).ClassKind = EnvDTE80.vsCMClassKind.vsCMClassKindPartialClass; 

주 또는 Intellisense.

+0

좋은 전화, 고마워요! =) – Tatranskymedved