(依赖注入框架:Ninject ) 一 手写依赖注入

什么是依赖注入?

这里有一个场景:战士拿着刀去战斗:

刀:

class Sword 
{
    public void Hit(string target)
    {
        Console.WriteLine($"Chopped {target} clean in half.");
    }
}

战士:

class Samurai
{
    readonly Sword sword;
    public Samurai() 
    {
        this.sword = new Sword();
    }
}

战士用刀:

public void Attack(string target)
    {
        this.sword.Hit(target);
    }
}

OK,我们用刀武装了战士

 

分析:刀和战士是高内聚的,因为战士依赖刀才得以创建,当你想给战士换一个武器的时候,你必须修改战士的实现方法,即构造函数

 

修正一:使用接口来避免高内聚

武器接口:

interface IWeapon
{
    void Hit(string target);
}  

继承接口的刀类:

class Sword : IWeapon
{
    public void Hit(string target) 
    {
        Console.WriteLine("Chopped {0} clean in half", target);
    }
}  

战士类:

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);
    }
}

  

 现在我们可以说:我们给战士注入了武器(构造函数注入),不需要修改战士的实现就能给他更换武器

 

 接口化并暴露依赖的实例  这被称作手写依赖注入

 

 But,当你的项目越来越大,对象越来越多,你将花费大量的时间去连接对象,那么,依赖注入库由此而来

 

来自 <https://github.com/ninject/Ninject/wiki/Dependency-Injection-By-Hand> 

 

转载于:https://www.cnblogs.com/swobble/p/10643955.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值