Ninjectを使ってみた その3

インジェクションのタイプは、3つだそうです。

  • コンストラクタインジェクション
  • プロパティインジェクション
  • メソッドインジェクション

バージョン1のころはフィールドインジェクションがあったようですが、バージョン2で廃止したそうです。C#VB.NETの場合はプロパティインジェクションがあれば不要ということでしょうね。


プロパティインジェクション。

[global::Microsoft.VisualStudio.TestTools.UnitTesting.TestMethod]
public void Property_injection()
{
    var kernel = new StandardKernel();
    kernel.Bind<IWeapon>().To<Sword>();
    kernel.Bind<SamuraiP>().ToSelf();
    var samurai = kernel.Get<SamuraiP>();
    Assert.AreEqual(samurai.Attack("忍者"), "忍者を切りつけた");
}

public class SamuraiP
{
    [Inject]
    public IWeapon _weapon {private get;set;}

    public string Attack(string target)
    {
        return _weapon.Hit(target);
    }
}

メソッドインジェクション。

[global::Microsoft.VisualStudio.TestTools.UnitTesting.TestMethod]
public void Method_injection()
{
    var kernel = new StandardKernel();
    kernel.Bind<IWeapon>().To<Sword>();
    kernel.Bind<SamuraiM>().ToSelf();
    var samurai = kernel.Get<SamuraiM>();
    Assert.AreEqual(samurai.Attack("忍者"), "忍者を切りつけた");
}

public class SamuraiM
{
    private IWeapon _weapon;

    [Inject]
    public void Arm(IWeapon weapon)
    {
        _weapon = weapon;
    }

    public string Attack(string target)
    {
        return _weapon.Hit(target);
    }
}