2011-09-21 31 views
5

Şablonun çıktısını üretmek için kullanabileceğim bir sınıf oluşturmak için TextTemplatingFilePreprocessor ile kullanılan bir T4 şablonum var.T4 şablonları içinde Koşullu derleme sembolleri kullanılabilir

T4 şablonunun başında birkaç ad alanı alıyorum. Örneğin.

<#@ import namespace="Company.ProductX.Widgets" #> 
<#@ import namespace="Company.ProductX.Services" #> 
//... 

I (aynı arabirimleri sağlamak ancak ProductX işlevselliği farklı) ad başka bir dizi ile bu ithalat dışarı geçiş Preprocessor Directives kullanmak istiyorum. Örneğin. Yukarıdaki örnek ile

<# 
#if(ProductX) 
{ 
#> 
    <#@ import namespace="Company.ProductX.Widgets" #> 
    <#@ import namespace="Company.ProductX.Services" #> 
    //... 
<# 
} 
#endif 
#> 
<# 
#if(ProductY) 
{ 
#> 
    <#@ import namespace="Company.ProductY.Widgets" #> 
    <#@ import namespace="Company.ProductY.Services" #> 
    //... 
<# 
} 
#endif 
#> 

ithalatı bakılmaksızın önişlemci direktifi sınıfına karşılık gelen kullanarak ifadeleri oluşturmak görünüyor. Örneğin.

using Company.ProductX.Widgets 
using Company.ProductX.Services 
using Company.ProductY.Widgets 
using Company.ProductY.Services 

şablonu kendisi yerine sadece şablon çıkışını etkileyecek T4 şablonları Önişlemciler kullanmak için başka bir yolu var mı?

cevap

5

Örneğinizde, önişlemci yönergesi üretilen çıktıya enjekte edilir. Potansiyel olarak yapabileceğiniz şey, doğru ad alanını içe aktaran bir ProductX.tt dosyası oluşturmaktır ve şablon kodunu eklemek için < # @ include #> komutunu kullanır. Böyle

şey (ProductX.tt):

<#@ import namespace="Company.ProductX.Widgets" #> 
<#@ import namespace="Company.ProductX.Services" #> 

<#@ include file="TheTemplateCode.ttinclude"  #> 

(ProductY.tt): Bu size yardımcı olur

<#@ import namespace="Company.ProductY.Widgets" #> 
<#@ import namespace="Company.ProductY.Services" #> 

<#@ include file="TheTemplateCode.ttinclude"  #> 

Emin değilim ama biraz mücadele ediyorum dürüst olmak gerekirse Burada kullanım durumu ile biraz.

+0

Bunu yapmak için 'başlık' şablonlarını kullanıyoruz ve iyi çalıştığını görüyoruz. Ürüne yerleşik direktiflerin etrafına koşulların eklenmesi için bir yol yoktur. – GarethJ

+0

Cevabınız için teşekkürler. Bu iyi bir iş gibi geliyor. Çalıştığım zaman çözüm olarak işaretleyeceğim. –

0

Eski bir soru için yeni bir fikir.

Rasgele koddan T4 çıktısına geçmek için Custom T4 Text Template Directive Processor kullanmak mümkün olabilir.

Özel yönerge işlemcisinin her makinede kullanılması için kaydedilmesi gerekir.

+1

Özel bir yönerge olan, özel bir yönerge işlemcisi yazabilirsiniz, evet. Yine de başlık şablonu yaklaşımı ile karşılaştırıldığında çok iş var. – GarethJ

İlgili konular