dependency_injector.wiring 모듈의 Provide와 inject는 Python Dependency Injector 라이브러리에서 의존성 주입(Dependency Injection)을 구현할 때 사용하는 핵심 도구입니다. 이를 통해 클래스나 함수가 외부에서 관리되는 의존성을 쉽게 주입받을 수 있습니다. 아래에서 각각의 기능을 자세히 설명하겠습니다.
Provide는 의존성 주입을 위한 컨테이너에서 특정 의존성을 가져오는 데 사용됩니다.
역할:
사용 예:
from dependency_injector import containers, providers
from dependency_injector.wiring import Provide
# 컨테이너 정의
class Container(containers.DeclarativeContainer):
config = providers.Configuration() # 설정 정보를 제공
service = providers.Factory(SomeService, config=config)
# 서비스 주입
async def some_function(service: SomeService = Depends(Provide[Container.service])):
await service.do_something()
설명:
inject는 클래스나 함수의 파라미터에 컨테이너에서 의존성을 자동으로 주입하기 위해 사용됩니다.
역할:
사용 예:
코드 복사
from dependency_injector.wiring import inject, Provide
class SomeService:
def do_something(self):
print("Service is working!")
@inject
def some_function(service: SomeService = Provide[Container.service]):
service.do_something()
# 호출 시 자동으로 의존성 주입
some_function()
설명:
Provide와 inject는 FastAPI와 같은 프레임워크에서 의존성을 쉽게 주입하는 데 자주 사용됩니다.
from fastapi import APIRouter, Depends
from dependency_injector.wiring import Provide, inject
router = APIRouter()
@router.get("/example")
@inject
async def example_endpoint(
service: SomeService = Depends(Provide[Container.service])
):
return service.perform_action()