与其手动费时费力地实现,不如利用Ninject方便的实现我们的需求。
Ninject如何将你需要的类型返回给你
拿前面的例子,士兵类:
1 class Samurai 2 { 3 readonly IWeapon weapon; 4 public Samurai(IWeapon weapon) 5 { 6 this.weapon = weapon; 7 } 8 9 public void Attack(string target) 10 { 11 this.weapon.Hit(target); 12 } 13 }
而Ninject希望这样获取具体的士兵类:
IKernel kernel = new StandardKernel(); var samurai = kernel.Get<Samurai>();
Ninject会利用构造函数获取Samurai的实例,但Samurai的构造函数中包含一个IWeapon接口,而IWeapon接口是不可以实例化的。Ninject采用的方式是,typebinding,
typebinding是将具体的类和要实现的接口(抽象类)进行绑定的技术。就这个例子来说,
Ninject会这样实现:
1 Bind<IWeapon>().To<Sword>();
这句代码的意思是,当Ninject碰到需要实例化IWeapon接口的时候,它会实例出Sword对象以满足IWeapon的需要。