T4 – direktiva Parameter
V Visual Studio text šablony parameter směrnice deklaruje vlastnosti v kódu šablony, které jsou inicializovány z hodnot předaná z externí kontextu.Tyto hodnoty lze nastavit, pokud napsat kód, který vyvolá transformace textu.
Pomocí parametru směrnice
<#@ parameter type="Full.TypeName" name="ParameterName" #>
parameter Směrnice deklaruje vlastnosti v kódu šablony, které jsou inicializovány z hodnot předaná z externí kontextu.Tyto hodnoty lze nastavit, pokud napsat kód, který vyvolá transformace textu.Hodnoty mohou být předány buď Session slovníku, nebo v CallContext.
Můžete deklarovat parametry typu nelze poskytnout vzdáleně.Je nutné deklarovat typ s SerializableAttribute, nebo musí být odvozena od MarshalByRefObject.To umožňuje hodnoty parametrů, které mají být předány do domény, ve kterém je šablona zpracovány.
Můžete například napsat text šablony s následujícím obsahem:
<#@ template language="C#" #>
<#@ parameter type="System.Int32" name="TimesToRepeat" #>
<# for (int i = 0; i < TimesToRepeat; i++) { #>
Line <#= i #>
<# } #>
Předávání hodnot parametrů šablony
Pokud vytváříte Visual Studio rozšíření jako příkaz nabídky nebo obslužné rutiny události můžete zpracovat šablony pomocí služby templating textu:
// 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"));
Předávání hodnot v kontextu volání
Můžete také předat hodnoty jako logická data v CallContext.
Následující příklad předá hodnoty pomocí obou metod:
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
Předávání hodnot do textu šablony Run-Time (Preprocessed)
Není obvykle nutné používat <#@parameter#> směrnice spuštění (předem zpracovaný kód) text šablony.Místo toho můžete definovat další konstruktor nebo nastavitelnou vlastnost pro generovaný kód, kterým můžete projít hodnoty parametrů.Další informace naleznete v tématu Generování textu za běhu pomocí textových šablon T4.
Ale pokud chcete použít <#@parameter> v šabloně spuštění můžete předat hodnoty jej pomocí relace slovníku.Například Předpokládejme jste vytvořili soubor jako předem zpracovaný kód šablony se nazývá PreTextTemplate1.V programu můžete vyvolat šablony pomocí následujícího kódu.
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();
Získání argumenty z TextTemplate.exe
![]() |
---|
parameter Směrnice načíst hodnoty nastavené v –a parametr TextTransform.exe nástroj.Chcete-li získat tyto hodnoty nastavit hostSpecific="true" v template směrnice a používání this.Host.ResolveParameterValue("","","argName"). |