C# Edmx ve Text for Template (TT) Dosyaları ile Otomatik Kod Oluşturma
T4 Text Template Giriş
T4 Text Template ile dinamik olarak nasıl dosya oluşturabileceğimizi göreceğiz. Aslında EntityFramework’den aşina olduğumuz ama dosyalarına çoğu zaman müdahale etmediğimiz *.tt uzantılı dosyalar birer T4 metin şablonudur.
T4 Text Template
T4 Text Template Nasıl Oluşturulurdan önce çok basit şekilde .tt uzantılı dosya içerisindeki yazılan kodlar nasıl sonuca ulaşıyor 3 aşamada görelim bir şema üzerinde.
Yeni T4 Text Template Oluşturma
Hemen T4 anlatımına T4 Text Template nasıl oluşturabiliriz ile başlayalım projeye Projenize Solution Explorer penceresinden sağ tuş yapıp Add menüsü altındaki Add New Item‘a tıklayın çıkan şablon listesinden Text Template‘i seçin ve projenize ekleyin. Projenize ekledikten sonra .tt uzantılı bir dosyanın oluştuğunuz göreceksiniz. Eğer herhangi bir isim değişikliği yapmadıysanız TextTemplate1.tt adlı bir dosya oluşacaktır.
Dosya oluştuktan sonra alttakine benzer bir kod ile karşılaşacaksınız ve <#@ …. #> bu şekildeki tanımlamaların her bir satırına direktif diyoruz. Direktifleri ayrıntılı olarak farklı bir makalede ele alacağız.
TT dosyası nasıl oluşturulur ?
Kod
<#@ template debug="false" hostspecific="false" language="C#" #>
<#@ assembly name="System.Core" #>
<#@ import namespace="System.Linq" #>
<#@ import namespace="System.Text" #>
<#@ import namespace="System.Collections.Generic" #>
<#@ output extension=".cs" #>//Burada normalde txt yazar fakat biz cs yani class çıkartmasını istediğimiz için çıktı tipini .cs yapıyoruz.
public class Sayilar
{
<#for(int i=1;i<=20;i++)
{#>
public int sayi<#=i#> {get;set;} //burada diyez(#) işaretleri C# programlama kodunu açıklamadan ayırmak için kullanılır.
<#}#>
}
Standart kontrol blokları – Standard control blocks
Şimdi for döngüsü ile 10 defa döngü değeri olan i değişkeninin her dönüşte karesini alacak metni Generator ile .txt uzantılı dosyaya yazılacak. Kodlarımızı <# … #> Standart Kontrol Blokları arasında kodlarımızı yazacağız farklı birkaç blok tanımları daha var sırasıyla bunlarıda göreceğiz. Şimdi standrt kontrol blokları arasında yazdığımız örneği inceleyelim.
Kod(TextTemplate1.tt)
<#@ template debug="false" hostspecific="false" language="C#" #>
<#@ assembly name="System.Core" #>
<#@ import namespace="System.Linq" #>
<#@ import namespace="System.Text" #>
<#@ import namespace="System.Collections.Generic" #>
<#@ output extension=".cs" #>//Burada normalde txt yazar fakat biz cs yani class çıkartmasını istediğimiz için çıktı tipini .cs yapıyoruz.
<#int top = 10;
for (int i = 0; i<=top; i++)
{
#>
<#= i #>'in karesi <#= i*i #>.
<#
}
#>
Çıktı:
Sınıf özelliği kontrol blokları – Class feature control blocks
Sınıf özelliği kontrol blokları tanımlaması <#+ … #> şeklinde yapılmaktadır ve bu bloklar içerisine özellik(property) ve metod tanımlamaları yapılır tt uzantılı dosya içerisinde kullanılabilir kısacası çıktı oluşturmak için yardımcı metodlar ve özellikler(properties) oluşturabiliriz ve bunları kullanabiliriz hemen bu kontrol bloğu ile ilgili bir örnek yapıp çıktıyı kontrol edelim ve bilgimizi pekiştirelim.
Kod(TextTemplate2.tt)
<#@ template debug="false" hostspecific="false" language="C#" #>
<#@ assembly name="System.Core" #>
<#@ import namespace="System.Linq" #>
<#@ import namespace="System.Text" #>
<#@ import namespace="System.Collections.Generic" #>
<#@ output extension=".cs" #>//Burada normalde txt yazar fakat biz cs yani class çıkartmasını istediğimiz için çıktı tipini .cs yapıyoruz.
Kareler:
<#
for (int i = 0; i < 4; i++)
{
#>
<#= i + 1 #> sayısının karesi <#= Square(i+1) #>
<#
}
#>
Liste bitişi.
<#+ // Sınıf özelliği bloğu
int Square(int i)
{
return i*i;
}
#>
Yorumlar
Yorum Gönder