T4 Dyrektywy parametr
W Visual Studio tekst szablonu, parameter dyrektywy deklaruje właściwości w kodzie szablonu, które są inicjowane z wartości przekazanych w zewnętrznych kontekstu.Te wartości można ustawić, jeśli napisanie kodu, który wywołuje przekształcenie tekstu.
Za pomocą dyrektywy parametr
<#@ parameter type="Full.TypeName" name="ParameterName" #>
parameter Dyrektywy deklaruje właściwości w kodzie szablonu, które są inicjowane z wartości przekazanych w zewnętrznych kontekstu.Te wartości można ustawić, jeśli napisanie kodu, który wywołuje przekształcenie tekstu.Wartości mogą być przekazywane w Session dictionary, lub w CallContext.
Można deklarować parametrów dowolnego typu lokalnie.Oznacza to, że typ musi być zadeklarowana z SerializableAttribute, lub musi pochodzić od MarshalByRefObject.Dzięki temu wartości parametrów ma zostać przekazany do elementu AppDomain, w którym szablon jest przetwarzany.
Na przykład można napisać szablon tekst o następującej treści:
<#@ template language="C#" #>
<#@ parameter type="System.Int32" name="TimesToRepeat" #>
<# for (int i = 0; i < TimesToRepeat; i++) { #>
Line <#= i #>
<# } #>
Przekazanie wartości parametru do szablonu
Jeśli piszesz Visual Studio rozszerzenie, takie jak polecenia menu lub moduł obsługi zdarzeń, można przetwarzać szablonu, za pomocą usługi dynamicznego tekstu:
// 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"));
Przekazanie wartości w kontekście Call
Można również przekazać wartości danych w logiczną w CallContext.
W poniższym przykładzie przekazuje wartości za pomocą obu tych 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
Przekazanie wartości do szablonu tekst Run-Time (Preprocessed)
Nie jest zazwyczaj konieczne jest użycie <#@parameter#> w dyrektywie z szablonami run-time (wstępnie) tekstu.Zamiast tego można zdefiniować dodatkowe konstruktora lub można ustawić właściwość wygenerowany kod, za pomocą którego można przekazać wartości parametru.Aby uzyskać więcej informacji, zobacz Generowanie tekstu Run-Time z szablonami tekst T4.
Jednakże jeśli chcesz użyć <#@parameter> w szablonie run-time, można przekazać wartości do niej za pomocą słownika dla sesji.Na przykład załóżmy, że plik został utworzony jako szablon wstępnie o nazwie PreTextTemplate1.Szablon programu mogą być wywoływane przy użyciu następującego kodu.
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();
Uzyskiwanie argumenty z TextTemplate.exe
![]() |
---|
parameter Dyrektywy nie pobiera wartości ustawione w –a parametr TextTransform.exe narzędzia.Aby uzyskać te wartości, należy ustawić hostSpecific="true" w template dyrektywy i wykorzystanie this.Host.ResolveParameterValue("","","argName"). |