Revision 1 as of 2012-08-15 00:01:51

Clear message
Locked History Actions

CS/DI/SimpleInjector

Simple Injectorを使う

概要

名前の通りシンプルなインジェクタ。ユニットテスト目的のためにはこれで十分。 スピードも高速(らしい)。以下ではGuiceと比較しながら、使用法を説明。

基本的な使い方

バインディング

SimpleInjector.dll(.NET 3.5用と4用がある)を参照設定し、以下を記述。

using SimpleInjector;

インジェクタを生成するが、Guiceのように生成時にモジュール指定はしない。 クラス名はContainerだが、変数名はinjectorとしておく。

Container injector = new Container();

バインディングはそれぞれメソッドを呼び出すことによって行う。 シングルトンの場合は、RegisterSingle、通常のオブジェクトの場合はRegisterをつかう。

  injector.RegisterSingle<ITracerFactory, TracerFactory>();
  injector.Register<IAccount, Account>();

その場でシングルトンを生成する場合は以下。

 injector.RegisterSingle<ISample>(new Sample());

※Guiceのような@ImplementedByや@Singletonアノテーションは無い。 また、GuiceのようなModuleといったものは用意されていない。 それぞれのバインディングについてRegister*を呼び出す必要がある(例外あり)。

GuiceではInjector作成時にすべてのモジュールを指定するので、(おそらく)その場でバインディングの矛盾が検出することができるが、Simple Injectorではそうではない。 そこで、Verify()というメソッドを呼び出すことにより、バインディングの矛盾を検出するらしい。

  injector.Verify();

このメソッドは、各オブジェクトを実際に生成してしまうことに注意。テスト時にのみ呼び出すことが望ましいとおもわれる。

参考