Ninject1.0
.NETで動作するDIコンテナ「Ninject」が公開されていました。
- 特徴
- コード例(C#)
class Samurai { private IWeapon _weapon; [Inject] public Samurai(IWeapon weapon) { _weapon = weapon; } public void Attack(string target) { _weapon.Hit(target); } }
詳細はこの辺にありますが、コードのイメージとしては、流れるようなインターフェースを意識しているそうです。また、実装の型にも注目しているようで、ひとつのインターフェースに対して、複数の実装を切り替えてインジェクションすることもできます。
//赤 Bind<IService>().To<RedImpl>().Only(When.Context.Target.HasAttribute<RedAttribute>()); class ConsumerA { public ConsumerA([Red] IService service) { // 引数の"service"にはRedImplが設定される } } //青 Bind<IService>().To<BlueImpl>().Only(When.Context.Target.HasAttribute<BlueAttribute>()); class ConsumerB { public ConsumerB([Blue] IService service) { // 引数の"service"にはBlueImplが設定される } }
DLLのサイズが小さいところ、実装クラスの切り替えが簡単なところが面白そうに思いました。