Partilhar via


T4 Diretiva de parâmetro

Em um Visual Studio o modelo de texto, o parameter diretiva declara propriedades em seu código de modelo que são inicializados a partir de valores passados do contexto externo. Se você escrever código que chama a transformação de texto, você pode definir esses valores.

Usando a diretiva de parâmetro

<#@ parameter type="Full.TypeName" name="ParameterName" #>

O parameter diretiva declara propriedades em seu código de modelo que são inicializados a partir de valores passados do contexto externo. Se você escrever código que chama a transformação de texto, você pode definir esses valores. Os valores podem ser passados na Session dicionário, ou em CallContext.

Você pode declarar parâmetros de qualquer tipo remoto. Ou seja, o tipo deve ser declarado com SerializableAttribute, ou ele deve derivar de MarshalByRefObject. Isso permite que os valores dos parâmetros a serem passados para o AppDomain em que o modelo é processado.

Por exemplo, você poderia escrever um modelo de texto com o seguinte conteúdo:

<#@ template language="C#" #>

<#@ parameter type="System.Int32" name="TimesToRepeat" #>

<# for (int i = 0; i < TimesToRepeat; i++) { #>
Line <#= i #>
<# } #>

Passar valores de parâmetro para um modelo

Se você estiver escrevendo um Visual Studio a extensão como, por exemplo, um comando de menu ou um manipulador de eventos, você pode processar um modelo usando o serviço de modelagem de texto:

// Get a service provider – how you do this depends on the context:
IServiceProvider serviceProvider = dte; // or dslDiagram.Store, for example 
// Get the text template service:
ITextTemplating t4 = serviceProvider.GetService(typeof(STextTemplating)) as ITextTemplating;
ITextTemplatingSessionHost host = t4 as ITextTemplatingSessionHost;
// Create a Session in which to pass parameters:
host.Session = host.CreateSession();
// Add parameter values to the Session:
session["TimesToRepeat"] = 5;
// Process a text template:
string result = t4.ProcessTemplate("MyTemplateFile.t4",
  System.IO.File.ReadAllText("MyTemplateFile.t4"));

A passagem de valores no contexto de chamada

Como alternativa você pode passar valores lógicos como dados em CallContext.

O exemplo a seguir passa valores usando os dois métodos:

ITextTemplating t4 = this.Store.GetService(typeof(STextTemplating)) as ITextTemplating;
ITextTemplatingSessionHost host = t4 as ITextTemplatingSessionHost;
host.Session = host.CreateSession();
// Pass a value in Session:
host.Session["p1"] = 32;
// Pass another value in CallContext:
System.Runtime.Remoting.Messaging.CallContext.LogicalSetData("p2", "test");

// Process a small template inline:
string result = t4.ProcessTemplate("", 
   "<#@parameter type=\"System.Int32\" name=\"p1\"#>"
 + "<#@parameter type=\"System.String\" name=\"p2\"#>"
 + "Test <#=p1#> <#=p2#>");

// Result value is:
//     Test 32 test

Passar valores para um modelo de texto de tempo de execução (pré-processado)

Ele geralmente não é necessário usar o <#@parameter#> diretiva com o tempo de execução (pré-processado) modelos de texto. Em vez disso, você pode definir um construtor adicional ou uma propriedade pode ser definida para o código gerado, pela qual você passa os valores de parâmetro. Para obter mais informações, consulte Geração de texto de tempo de execução usando os modelos de texto T4.

No entanto, se você quiser usar <#@parameter> em um modelo de tempo de execução, você pode passar valores a ele usando o dicionário de sessão. Por exemplo, suponha que você criou o arquivo como um modelo pré-processado chamado PreTextTemplate1. Você pode chamar o modelo do seu programa usando o código a seguir.

PreTextTemplate1 t = new PreTextTemplate1();
t.Session = new Microsoft.VisualStudio.TextTemplating.TextTemplatingSession();
t.Session["TimesToRepeat"] = 5;
// Add other parameter values to t.Session here.
t.Initialize(); // Must call this to transfer values.
string resultText = t.TransformText();

Obtendo a argumentos de TextTemplate.exe

Observação importanteImportante

O parameter diretiva não recuperar os valores definidos na –a parâmetro da TextTransform.exe utilitário. Para obter esses valores, defina hostSpecific="true" na template diretiva e o uso this.Host.ResolveParameterValue("","","argName").

Histórico de alterações

Date

History

Motivo

Março de 2011

Dividir o tópico do pai.

Aprimoramento de informações.