MST

星途 面试题库

面试题:C#中依赖注入与控制反转基础概念及简单实现

请简要阐述C#中依赖注入(Dependency Injection)和控制反转(IoC)的概念,并使用一个简单的示例代码展示如何在C#中实现依赖注入,假设我们有一个服务接口`IService`及其实现类`Service`,在另一个类`Consumer`中使用依赖注入。
48.6万 热度难度
编程语言C#

知识考点

AI 面试

面试题答案

一键面试

概念阐述

  1. 控制反转(IoC - Inversion of Control)
    • IoC是一种设计原则,它将对象创建和对象之间的依赖关系管理从应用程序代码本身转移到外部容器或框架。通过IoC,对象不再自己负责查找和创建它们所依赖的对象,而是由外部容器提供这些依赖。这样做的好处是降低了组件之间的耦合度,提高了代码的可维护性和可测试性。
  2. 依赖注入(Dependency Injection)
    • 依赖注入是实现IoC的一种具体方式。在依赖注入中,当一个对象需要使用另一个对象(即依赖)时,通过构造函数、属性或方法参数的方式将依赖传递给该对象,而不是在对象内部自行创建依赖。

示例代码

  1. 定义服务接口和实现类
// 定义服务接口
public interface IService
{
    void DoWork();
}

// 服务接口的实现类
public class Service : IService
{
    public void DoWork()
    {
        Console.WriteLine("Service is doing work.");
    }
}
  1. 使用依赖注入的类
// Consumer类,通过构造函数注入依赖
public class Consumer
{
    private readonly IService _service;

    public Consumer(IService service)
    {
        _service = service;
    }

    public void Consume()
    {
        _service.DoWork();
    }
}
  1. 测试依赖注入
class Program
{
    static void Main()
    {
        // 创建服务实例
        IService service = new Service();
        // 创建Consumer实例,并通过构造函数注入服务
        Consumer consumer = new Consumer(service);
        consumer.Consume();
    }
}

在上述代码中,Consumer类依赖于IService,通过构造函数将IService的具体实现(这里是Service类的实例)注入到Consumer类中,实现了依赖注入。