2012-05-24 2 views
0

무엇을하려고합니까

T4를 사용하여 메일 메시지 템플릿을 만들려고합니다.T4 전처리 된 템플릿 사용자 정의

내가 제대로 understoo 경우, 나는 Microsoft.VisualStudio.TextTemplating 어셈블리 종속성을 도입하지 않고 런타임에 메시지를 생성하려는 경우 내가해야 할 일이다하는 전처리 템플릿을 사용하고 있습니다. 내 템플릿에 일부 데이터를 전달하려는 때문에

, 나는 그것을 매개 변수를 추가 :

<#@ template language="C#" #> 
<#@ parameter name="Param1" type="System.String" #> 
<#@ parameter name="Param2" type="System.  
Lorem <#= Param1 #> dolor <#= Param2 #> 

그런 다음 나는이 같은 인수를 전달 메시지를 생성 할 수 있습니다

static void Main(string[] args) { 
    var template = new LoremIpsum(); 
    template.Session = new Dictionary<string, object>() { 
     {"Param1", "ipsum"}, 
     {"Param2", "sit amet"}, 
    }; 
    template.Initialize(); 
    string text = template.TransformText(); 
} 

문제 란

이러한 클래스를 여러 개 생성해야하므로 다음과 같이 메일을 보내는 일반적인 방법이 필요합니다.

더 나은 6,
public void SendMail(string to, IDictionary<string, object> parameters) 

또는 :

public void SendMail(string to, string Param1, string Param2) 

생성 된 클래스는 부분이기 때문에, 그들을 다른 부분 클래스 선언을 추가하는 방법을 추가 할 수 있습니다,하지만 내가 반복해야한다는 것을 의미한다 생성 된 모든 클래스에 대해 (다소간) 동일한 코드를 사용합니다.

지금까지 내가 기본 클래스를 만드는 시도

을 시도 무엇

,하지만 난이 일을하려고하는 경우 : 다음
<#@ template language="C#" inherits="MailTemplateBase" #> 

생성 된 코드 나누기

, 생성 된 클래스는 LoremIpsumBase에 의존 한대로 일부 도우미 메서드를 정의한 기본 클래스 (그리고 실제로 생성 된 각 클래스를 거의 동일하지만 별개의 기본 클래스에서 상속 받는다는 의미는 없습니다).

질문

어떻게 내 템플릿에 대한 기본 클래스를 가질 수 있습니다
    1. ?
    2. 템플릿에서 선언 된 매개 변수와 동일한 매개 변수를 허용하는 메서드를 어떻게 만들 수 있습니까?
  • 답변

    2

    빈 템플릿을 만들고 생성 된 클래스를 복사하여 기본 클래스로 사용해야한다고 생각합니다. 그런 다음 필요한 모든 속성으로 확장 할 수 있습니다. (코드를 복사 한 후에는 빈 템플릿을 유지할 필요가 없습니다.)

    VS2010 SP1에서는 VS2010 SP1에서 변경된 사항을 해결하기 위해 노력하고있는 것이 무엇인지 생각합니다. 따라서 템플릿 자체를 하위 클래스로 만들 수 있습니다. 자세한 내용은 connect issue을 확인하십시오.

    편집 :

    지금까지 기본 간다에 이메일 방법을 넣어, 나는 아마 그런 식으로하지 않을 것입니다.

    public class TemplatingService : ITemplatingService 
    { 
        public string GenerateReminderMessage(string to, string name) 
        { 
         // Construct the template, passing in the parameters into the session as required 
         ... 
         // Return the results of the template transformation 
        } 
    } 
    

    뭔가 어딘가에 휴식 않습니다 그래서 만약 당신이 떨어져 실제 T4 구현에서 추상화하고 그 방법을 : 당신은 예를 들어, 당신이 필요로하는 것을 그 위에 다양한 방법을 가지고 템플릿 서비스의 일종 노출에 대해 생각 할 수 있습니다 라인을 내려 가면 한 클래스에서 문제를 해결할 수 있습니다.

    그리고 메일 내용을 생성하는 템플릿 서비스를 사용하는 메일 서비스에 노출 다음 MailerService 그냥 간단한 .NET 메일 코드 주위에 래퍼하지만,이 장치에 당신을 허용 할 것이라고

    public class MailService : IMailService 
    { 
        public void SendReminderEmail(string to, string name) 
        { 
         var message = this.TemplatingService.GenerateReminderMessage(to, name); 
         this.MailerService.SendEmail(to, message); 
        } 
    } 
    

    주 메일 서비스를 별도로 테스트하십시오.

    더 많은 방법으로 추상화 할 수 있지만 시작일 것입니다.

    희망이 있습니다.

    +0

    질문을 많이 편집했지만 생성 된 기본 클래스를 복사하여이를 기본 클래스로 사용하는 것이 최선의 방법이라고 생각합니다. 하지만이 문제가 다음 VS 버전이나 업데이트와 충돌 할 수도 있습니다. –

    +0

    그래, RTM과 SP1간에 문제가 있다는 것을 이해할 수 있습니다. –

    +0

    앞으로 이동하는 방법에 대한 권장 사항은 내 업데이트를 참조하십시오. –

    0

    여러분은 생성자 삽입이 데이터를 클래스에 삽입하는 유일한 방법이라고 생각합니다. 그러나 metod/property 주입이이 시나리오에서 더 나은 옵션이라고 생각합니다.

    필자는 컴파일러를 가지고 있지 않으며 확실하게 확인할 수는 없지만 제대로 작동하는지는 확실합니다.

    관련 문제