nuits.jp blog

C#, Xamarin, WPFを中心に書いています。Microsoft MVP for Development Technologies。

App.configの接続文字列情報から実装クラスを指定せずにをDbConnectionを生成する方法

データベースへのコネクションを生成する場合、次のような実装はソースに接続対象のDBへの依存を持ち込んでしまいます。

using(var connection = new SqlConnection(...))

App.configの接続情報を利用して、それを回避することができます。自分でもしょっちゅう忘れてしまうのでここにメモしておきます。

続きを読む

Dapperの拡張ライブラリ 比較検討

皆さん、Dapper使っていますか?

私は比較的最近まで、オレオレMicro ORMを使っていたので、あまり使っていませんでしたが、いろいろと反省してDapperに移行中です。

さてDapper非常に良いと思うのですが、単品だとさすがに実装効率があまりよろしくありません*1。そこで活躍するのがDapperの拡張ライブラリです。

しかし、多くの拡張ライブラリが存在しているため、何を使うか悩みます。というかまだ悩み中です。何かお勧めがあれば教えてもらいたいところです。

とはいえ、自分で調べないという訳にもいきませんので、Dapper拡張ライブラリをいくつか比較してみました。

*1:主キー指定で1レコード取得したり、1レコードのアップデートしたりを都度SQL書くのは非効率ですよね

続きを読む

Prism for WPF で非表示となったViewのインスタンスを破棄する設定

Prism for WPFではRegionという機能を利用することで、画面遷移実装する事ができます。具体的にはこちらをご覧ください。

さて、Regionを利用して画面遷移した場合、デフォルトの振る舞いではViewやViewModelのインスタンスは、一度生成されると以後はキャッシュされて再利用されます。この振舞は、画面のプロパティの初期化もれによる不具合を引き起こしがちです。*1

このため、個人的にはパフォーマンスを特別に気にする個所を除いて、インスタンスのキャッシュを無効化したいと思う事が良くあります。

本稿では非表示となったViewのインスタンスを破棄する方法を、二つのユースケースにたいして実現方法を紹介したいと思います。

*1:何らかの登録処理を連続して行うような業務アプリケーションを想像してください。メニュー画面から登録画面に遷移し、登録完了後メニュー画面に戻るとします。続けて登録画面に遷移すると、登録画面とそのViewModel(およびそれらが参照しているインスタンス)は再利用されるため、登録後から再度表示するまでの間に初期化処理していないと、以前の登録内容が表示されてしまうといった不具合を引き起こします。

続きを読む

App Center Analyticsを使い倒す - 静的コード生成を活用したXamarinにおけるAOP活用

本エントリーは、つぎの二つの機会に発表した内容をまとめ直したものです。

資料はこちらに公開しています。ただスライドは発表の補助資料な為、資料だけ見ても伝わり切りませんので、本エントリーもあわせてご覧ください。

https://www.slideshare.net/AtsushiNakamura4/app-center-analytics-97896393

続きを読む

良さげなDI Containerの比較記事を見つけた

英語のブログですが良さげな比較記事を見つけました。

www.palmmedia.de

私が知らなかっただけで、DI Containerのパフォーマンス評価としては著名なもののようですが。

github.com

個人的にDI Containerへ基本機能や安定性は大前提として、つぎのような条件を満たしてほしいと考えています。

  1. オブジェクト ライフサイクルのカスタマイズ
  2. .NET Standard対応
  3. Xamarin対応
  4. Generic対応
  5. Interception機能またはオブジェクト生成の独自定義

2.と3.は一見同じことのようですが、.NET Standardに対応していても動的コード生成が含まれているとXamarinでは動かないため厳密には異なります。

5.はContainer側でInterception機能が提供されていなくても、オブジェクト生成に関与できれば自前で対応が可能だからです。

これらを踏まえて、軽量な物を選ぶとぱっと見

  • Grace
  • LightInject
  • SimpleInjector

あたりに興味を覚えました。ちゃんと調べれば他にも該当する者はありそうですし、UnityやAutofacも現在大幅な改修が行われているので速度的には今後改善されるかもしれません。またコードを見てる訳ではないので、上げたものが本当に良いかどうかも分かりません。

何にしろ前述のブログ記事は、世の中にあふれかえっているDI Containerを選択する指針の一つにはなるんではないかと思いました。

という訳で今回はこれだけです。