簡體   English   中英

VsAddin或T4用於代碼生成(VS 2008)

[英]VsAddin or T4 for code generation (VS 2008)

我已經為我們的團隊構建了一個用於代碼生成(C#,VS 08)的插件。

如果我在解決方案資源管理器中單擊一個文件,則該插件會創建一個新的菜單項。 在那里,我可以選擇生成2個文件的目標測試項目。

對於代碼生成過程,我需要解決方案資源管理器中所選項目的信息(例如接口,類聲明的泛型類型)。

我的源類看起來像

public class CustomerLogic : BaseBL<T1, T2, T3>, ICustomerBL

生成的容器類

public class CustomerContainer : BaseBLDummyContainer<T1, T2, T3>

生成的虛擬類看起來像

public class CustomerBLDummy : BaseBLDummy<T1, T2, T3, CustomerContainer>, ICustomer

我是怎么意識到的?

我創建了兩個模板(容器和虛擬),將占位符放在空格中,因此兩個模板文件看起來像

容器模板

public class $Classname$ : BaseBLDummyContainer<$T1$, $T2$, $T3$>

虛擬模板

public class $Classname$ : BaseBLDummy<$T1$, $T2$, $T3$, $TContainer$>$, TInterface$

為了生成模板,我已經寫了一些代碼到

  • 創建文件
  • 將它們添加到目標項目
  • 根據需要創建方法

您可以看到,“大量”的工作只能生成一些代碼。

  1. 現在,我考慮使用T4的一代是否可以更好地解決我的情況?
  2. 我有T4機制的一些好處嗎? (我只看到了一些與EF或數據庫相關的生成相結合的T4示例)
  3. 我應該更靈活地使用T4嗎?

非常感謝。

您無需在此處選擇“ k”,您可以混合並匹配加載項和T4。

T4開箱即用地具有非常簡單的UI綁定到Visual Studio,它僅使用自定義工具機制(IVsSingleFileGenerator)將模板文件連接到項目中的輸出文件。 (有關更復雜的輸出,請參見T4Toolbox社區項目)。

但是,T4還在VS中公開了一個服務接口(STextTemplating / ITextTemplating),您可以在VS加載項和VS包中使用該服務接口。

因此,您可以保留外接程序的入口點和核心工作方式,但可以使用T4提供模板引擎,而不必自己維護該部分。 您可能會使用<#@ parameter#>指令將替換參數傳遞到T1,T2,T3等的模板中。

希望這為您提供一些前進的想法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM