かずきのBlog@hatena

すきな言語は C# + XAML の組み合わせ。Azure Functions も好き。最近は Go 言語勉強中。日本マイクロソフトで働いていますが、ここに書いていることは個人的なメモなので会社の公式見解ではありません。

T4

宣言的にクラスを宣言しT4 Templateでコードを生成する

T4 C#

タイトルが何を言っているんだおまえは?といった感じですが、ちょっと思いついたのでやってみました。後悔はしていない。 今回やる事 今回は、クラスや名前空間などの最小限の構造を定義することでアプリケーションコードのどんがらを作ってくれるものを最…

使い捨てのT4テンプレート活用法

T4 C#

ということで、MSDNのT4テンプレートのドキュメントを見たのは、ちょろっと使おうと思ったからです。 コード生成とテキスト テンプレート (T4) 単調な繰り返しを伴うコードを書くのは苦痛でしかありません。私が尊敬する上司の人は、これを田植えと言ってま…

T4 TemplateのMSDNドキュメント

T4

コード生成とテキスト テンプレート (T4) めもめも。

自作コードジェネレータを作ろう

C# T4

先日、ViewModelのコード生成を行うT4 Templateを作りました。そこで使ったテクニックを説明したいと思います。 前処理されたテキストテンプレート 以前にも紹介した前処理されたテキストテンプレートを使用しています。これはT4 Templateで書いたものを生成…

T4 Templateにもインテリセンスとか欲しいよね?

T4

ということでフィードバック書いてみました。 https://connect.microsoft.com/VisualStudioJapan/feedback/details/634891/t4-template無料のアドオンとかあるにはあるけど・・・Expressで入るか怪しい気がするし、勝手にアドオン入れれない環境もあると思う…

T4 TemplateでViewModelを生成する その3「Commandにも対応」

前のやつにCommandも定義出来るように追加してみました。 namespace VMDsl { using System.Collections.Generic; // 名前空間 public class NSDef { public NSDef() { this.Classes = new List<ClassDef>(); } public string NS { get; set; } public List<ClassDef> Classes { g</classdef></classdef>…

T4 TemplateでViewModelを生成する その2「DSLちっくにする」

前回たたき台を作ったMVVM生成のためのT4 Templateですが正直あんまり楽になった気がしないです。何故かというと、クラスのメタデータの定義が非常に冗長な感じになってたからだと思います。 1プロパティしかないクラスを定義するだけで、20行以上も書かな…

T4 TemplateでViewModelを生成する その2「DSLちっくにする」

前回たたき台を作ったMVVM生成のためのT4 Templateですが正直あんまり楽になった気がしないです。何故かというと、クラスのメタデータの定義が非常に冗長な感じになってたからだと思います。 1プロパティしかないクラスを定義するだけで、20行以上も書かな…

T4 TemplateでViewModelを作る

ちょいと作ってみた。 これをひな形にやっていけばいかなぁ。もっといい方法とかあるよ!って人は教えてください。 ClassDef.ttinclude とりあえずクラスのメタデータを定義するためのクラス群 <#+ // 名前空間 class NSDef { public string NS { get; set; …

Viausl Studio 2010で自作コードジェネレータ

C# T4

コードの自動生成は、色々なところでされていると思います。Excelのマクロで作ったり、自分でせっせとコードを書いたり、LLな言語を使ってさくっと作ったり、OSSのテンプレートエンジンで作ったり etc... そんな中で、1つコードジェネレータを作るときの選…

サービス参照で追加したクラスにIEditableObjectを実装させるT4 Template

Visual Studio 2010でサービス参照を追加したときに作成されるクラスは、INotifyPropertyChangedまで実装してくれてる。 (VS2008のは未確認。実装してたっけか?)このT4 Template使えばIEditableObjectが動くように出来るかも。 リフレクション使ってるので…