依赖注入(Dependency Injection,简称 DI)是一种软件设计模式,旨在将对象之间的依赖关系从代码内部解耦出来,通过外部提供的方式来建立依赖关系,从而提高软件的可维护性、可测试性和可扩展性。以下从概念、工作原理、常见类型、在不同框架中的应用等方面进行详细解释:
概念
在软件系统中,一个类(称为客户端类)往往需要使用另一个类(称为依赖类)的功能,这就形成了依赖关系。传统方式下,客户端类会在内部直接创建或引用依赖类的实例。而依赖注入模式则是将依赖类的实例通过外部传递的方式提供给客户端类,客户端类不需要自己负责创建依赖类的实例。
例如,一个UserService
类需要使用UserRepository
类来访问数据库中的用户数据,传统做法是在UserService
内部实例化UserRepository
:
public class UserService
{private readonly UserRepository _userRepository = new UserRepository();// 业务逻辑
}
采用依赖注入后,UserRepository
的实例由外部传入:
public class UserService
{private readonly UserRepository _userRepository;public UserService(UserRepository userRepository){_userRepository = userRepository;}