c#使用依赖注入

在C#中,依赖注入(Dependency Injection,DI)是一种非常重要的设计模式,尤其是在使用.NET框架进行开发时。C#的依赖注入可以通过多种方式实现,包括手动实现和使用框架提供的依赖注入容器。以下将详细介绍如何在C#中使用依赖注入。

1. 手动实现依赖注入

手动实现依赖注入主要是通过构造函数注入或Setter注入的方式,将依赖关系从外部传入。这种方式不依赖于任何框架,代码更加直观。

示例代码

假设有一个Car类依赖于Engine接口:
 
public interface IEngine
{
    void Run();
}

public class V8Engine : IEngine
{
    public void Run()
    {
        Console.WriteLine("V8 engine running.");
    }
}

public class Car
{
    private readonly IEngine _engine;

    // 构造函数注入
    public Car(IEngine engine)
    {
        _engine = engine;
    }

    public void Start()
    {
        _engine.Run();
    }
}
 
在客户端代码中,可以这样使用:
class Program
{
    static void Main(string[] args)
    {
        IEngine engine = new V8Engine();
        Car car = new Car(engine);
        car.Start(); // 输出:V8 engine running.
    }
}
 

2. 使用.NET Core/ASP.NET Core的依赖注入容器

从.NET Core开始,微软提供了一个内置的依赖注入容器,可以方便地管理依赖关系。以下是如何在.NET Core或ASP.NET Core项目中使用依赖注入的示例。

示例代码

首先,在Startup.cs中配置依赖关系:
public class Startup
{
    public void ConfigureServices(IServiceCollection services)
    {
        // 注册依赖关系
        services.AddTransient<IEngine, V8Engine>();
        services.AddTransient<Car>();
    }

    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        // 省略其他代码
    }
}
 
然后,在控制器中注入Car类:
public class HomeController : Controller
{
    private readonly Car _car;

    public HomeController(Car car)
    {
        _car = car;
    }

    public IActionResult Index()
    {
        _car.Start(); // 输出:V8 engine running.
        return View();
    }
}
posted @ 2025-08-14 11:36  yinghualeihenmei  阅读(27)  评论(0)    收藏  举报