4

このソースからコンストラクター注入を学んでいます https://softwareengineering.stackexchange.com/questions/177649/what-is-constructor-injection

ご理解いただけると幸いです。ただし、インターフェイスとクラス、およびコンストラクターでのインターフェイスの注入に関連する基本的な疑問があります。

具体的には、最初のスニペットのようにオブジェクト Sword を作成せずにインターフェイスを注入する方法を理解できません。

class Samurai
{
    readonly IWeapon weapon;
    public Samurai() 
    {
        this.weapon = new Sword();
    }
    public void Attack(string target) 
    {
        this.weapon.Hit(target);
    }
}

以下のスニペットでは、上記のコードと同じことを行うと主張していますが、疎結合を使用しています。

class Samurai
{
    readonly IWeapon weapon;
    public Samurai(IWeapon weapon) 
    {
        this.weapon = weapon;
    }
    public void Attack(string target) 
    {
        this.weapon.Hit(target);
    }
}

"new"2番目のスニペットでキーワードを使用してSwordのオブジェクトを作成していない理由と、それなしでどのように機能するかを誰かが理解するのを手伝ってもらえますか? 上記の 2 つのスニペットは同じですか? また、これはどのように結合を失うのでしょうか?

4

1 に答える 1