依赖注入(DI)的通俗解释

C#学习记录:依赖注入(DI)的通俗解释

想象你在开一家咖啡店,依赖注入就像是一种高效的"咖啡原料供应系统"。
最原始的方式:自己动手

❌ 没有DI的情况:
每次做咖啡时,你自己去仓库拿咖啡豆
自己磨豆子
自己煮开水
自己倒牛奶

// 相当于代码中的
public class CoffeeMaker {
public void MakeCoffee() {
var beans = new CoffeeBeans(); // 自己找豆子
var grinder = new Grinder(); // 自己拿研磨机
var water = new WaterHeater(); // 自己烧水
// …制作过程…
}
}

使用依赖注入后:专业分工
✅ 有DI的情况:
你只需要专注于"制作咖啡"这个核心工作
所有原料和工具都会自动送到你手边
今天用A品牌的牛奶,明天换B品牌,你完全不需要改变工作方式

// 相当于代码中的
public class CoffeeMaker {
private readonly ICoffeeBeans _beans;
private readonly IGrinder _grinder;
private readonly IWaterHeater _water;

// 所有需要的工具和原料都通过"构造函数"送进来
public CoffeeMaker(ICoffeeBeans beans, IGrinder grinder, IWaterHeater water) {
    _beans = beans;
    _grinder = grinder;
    _water = water;
}

public void MakeCoffee() {
    // 直接使用已经提供的工具和原料
    // ...制作过程...
}

}

DI容器的角色:智能管家
在ASP.NET Core中,builder.Services就是这个"智能管家":

登记服务(告诉管家有什么):
csharp
复制

// 登记:"当有人要ICoffeeBeans时,给他ArabicaBeans"
builder.Services.AddScoped<ICoffeeBeans, ArabicaBeans>();

自动配送(管家负责送货):
csharp
复制

// 当创建CoffeeMaker时,管家会自动:
// 1. 准备ArabicaBeans实例
// 2. 准备Grinder实例 
// 3. 准备WaterHeater实例
// 4. 把这些传给CoffeeMaker构造函数
var maker = serviceProvider.GetService<CoffeeMaker>();

为什么这样更好?
更换原料超容易:想换咖啡豆品牌?只需改一处注册代码
测试更方便:可以用"假豆子"做测试
各司其职:咖啡师只管做咖啡,不用关心原料从哪来
灵活组合:早晨用浓咖啡豆,下午换低因咖啡豆,咖啡师的工作方式完全不变

就像专业的咖啡店有专人负责供应链一样,DI让我们的代码也有了专业分工! ☕️

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值