2017-06-09 32 views
1

我的想法是由兩個主要部分組成:ASP.NET的核心DTO的和控制器,以打字稿類和接口

  1. 以C#DTO的(數據轉院對象),並將其轉換爲打字稿接口,保證客戶端模型與服務器端同步。
  2. 以ASP .Net核心控制器端點並將它們轉換爲使用http服務或類似的打字稿類。再次確保客戶端請求與服務器同步。

而且,無論何時對控制器或dto進行更改,打印機生成的項目都應刷新以在開發過程中保持同步。

我已經做了一些研究,發現以下堆棧溢出線程和其它來源:

  • DTO to TypeScript generator使用TypeLite庫,它似乎很大這表明,但根據文件,這要麼需要[ TsClass]屬性或啓動時對類的引用。但是,由於我使用的項目結構是安裝的,因此所有的dto都位於* .Dtos命名空間中,我有點缺少TypeScript.Definitions().ForNameSpace()。而且,這隻能解決第一個想法/問題。

  • Swashbuckly.AspNetCore允許我從控制器和dto的生成swagger文檔,然後任務將解釋swagger文檔並創建打字稿類和接口。缺點是,據我所知,這需要我啓動服務器,如果可能的話,我想避免這種情況,因爲這會使文件更改時很難更新。

僅供參考,這是一個新的項目,我要開始,所以沒有遺留代碼更新,此外,所有的ASP .NET核心端點將返回IActionResult使好的回報() ,BadRequest()等等。因此,要想獲得回報模型,在我看來會很難,因爲如果有的話,獲得它的dto並不容易。

於是,我想到了以下的解決方案,解決了這兩個問題:

  1. 創建一個單獨的包/應用程序使用Swashbuckly lib和生成模型和控制器無需啓動整個服務器。

  2. 在每個端點上創建註釋,沿着[Produces(SomeDto)]的行,在創建一個小型控制檯應用程序後,使用反射來獲取信息並從中生成打字稿。這會導致開發人員需要將這些信息保持同步,因此我認爲這些信息有重複。

但是,這兩種解決方案都不會自動更新C#源文件保存。

期待任何討論/建議。

+0

我一直在評估類似的東西。我會警告你,如果你使用TypeLite路徑,它目前不支持.NET Core;但是,我發現TypeLite是.NET 4中最好的解決方案。雖然它可能不提供名稱空間加載模式,但它使用遞歸標識來確定所有引用的屬性模型。因此,如果您有一個或兩個頂級模型,則可以簡單地引用這些和所有的子屬性類型,直到最低級別的模型也將被加載。 –

回答

1

如果您還在尋找....我認爲打字機http://frhagn.github.io/Typewriter/是您的解決方案。您可以生成指定要轉換什麼和如何轉換的模板。

它並不能滿足我所有的需求,因爲我需要一個工具來動態生成複雜的文件夾結構,但這是他們的v2路線圖。

除此之外,它做了很多繁重的工作,而且很容易配置。