かずきのBlog@hatena

日本マイクロソフトに勤めています。XAML + C#の組み合わせをメインに、たまにASP.NETやJavaなどの.NET系以外のことも書いています。掲載内容は個人の見解であり、所属する企業を代表するものではありません。

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が快適になりました。