かずきのBlog@hatena

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

VIsual Studio 2017 Previewで一押しの機能 だと思ったら VS2017で既に出来た話

追記

VS2017 Previewで凄くいいなと思った機能を紹介したのですが id:neuecc さんに、それVS2017でできるよ?って言われた話です。

コンストラクタに指定したいプロパティやフィールドを選択してCtrl + .でコンストラクタ生成される機能があるらしい。やってみたら出来ました。知らなかった…。

f:id:okazuki:20170803104649p:plain

選択しないといけないという点で、フィールドの定義が分断されてたり、このフィールドは初期化したいけど、これは初期化しないようにしたいというのはどうやるんだろう?そこはVS2017 Previewのほうが便利そう?

オリジナル

DIコンテナ使ってプログラム書くと、大体こんな風になりますよね?

class Consumer
{
    private IService1 Service1 { get; }
    private IService2 Service2 { get; }
}

そして、コンストラクタインジェクションするために引数をprivateな変数に格納するだけの作業が発生します。 個人的に、面白くないプログラミング作業のうちの1つです。

eclipseやNetBeansを何年も前に使ってた時には、フィールドからコンストラクタ生成とかいう機能があったのになぁ…とずっと思ってたけど、ついにVisual Studioにもこの機能が来ます!!

ということでクラスの適当なところでクイックフィックス(Ctrl + .)を表示させるとこんなのが出てきます。

f:id:okazuki:20170723170315p:plain

上書きを生成するみたいなプレビュー品質っぽい翻訳もありますが気にしません。 今回は、この中のコンストラクタを生成するを選択します。するとこんなダイアログが出てきます!素敵!

f:id:okazuki:20170723170448p:plain

OKをすると、こんな感じのコンストラクタが生成されます。

class Consumer
{
    private IService1 Service1 { get; }
    private IService2 Service2 { get; }

    public Consumer(IService1 service1, IService2 service2)
    {
        this.Service1 = service1;
        this.Service2 = service2;
    }
}

また1つVisual Studioが快適になりました。