dry-auto_inject 使用教程
项目介绍
dry-auto_inject
是一个容器无关的构造器注入混合库,旨在简化依赖注入过程。它与 dry-container
配合使用效果最佳,但支持任何响应 #[]
接口的容器。通过使用 dry-auto_inject
,您可以轻松地将应用程序的行为拆分为更小、更专注的单元,从而使逻辑更易于理解、测试和重构。
项目快速启动
安装
首先,通过 Bundler 安装 dry-auto_inject
:
gem 'dry-auto_inject'
然后在终端运行:
bundle install
设置容器
创建一个容器并注册依赖项:
require 'dry-container'
require 'dry-auto_inject'
class MyContainer
extend Dry::Container::Mixin
register 'users_repository' do
UsersRepository.new
end
register 'operations.create_user' do
CreateUser.new
end
end
Import = Dry::AutoInject(MyContainer)
使用注入
在类中使用注入:
class CreateUser
include Import['users_repository']
def call(user_params)
# 使用 users_repository 进行操作
end
end
应用案例和最佳实践
应用案例
假设我们有一个用户注册系统,需要使用 UsersRepository
来存储用户数据,并使用 CreateUser
操作来处理用户注册逻辑。通过 dry-auto_inject
,我们可以轻松地将这些依赖项注入到 CreateUser
类中。
最佳实践
- 模块化设计:将应用程序拆分为小而专注的单元,每个单元负责一个特定的功能。
- 依赖注入:使用
dry-auto_inject
管理依赖项,避免硬编码依赖。 - 测试友好:依赖注入使得单元测试更加容易,因为您可以轻松地替换依赖项以进行测试。
典型生态项目
dry-auto_inject
是 dry-rb
生态系统的一部分,与以下项目配合使用效果最佳:
- dry-container:一个简单的依赖容器,用于注册和解析依赖项。
- dry-system:一个应用程序系统管理工具,提供自动加载和依赖管理功能。
- dry-transaction:一个事务处理库,用于编排复杂的业务流程。
通过这些项目的配合使用,您可以构建一个高度模块化和可维护的应用程序。