• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    해결됨

DI 주입

23.08.22 12:50 작성 조회수 195

0

현재구조는

todo.py ( controller 역할 )

@router.get("/", status_code=200)
def get_todos_handler(
    order: str | None = None,
    todo_repo: ToDoRepository = Depends(ToDoRepository),
) -> TodoListSchema:
    todos: List[ToDo] = todo_repo.get_todos()
    if order and order == "DESC":
        return TodoListSchema(
            todos=[ToDoSchema.from_orm(todo) for todo in todos[::-1]]
        )
    return TodoListSchema(
        todos=[ToDoSchema.from_orm(todo) for todo in todos]
    )

repository.py ( service 와 repository 역할 )
로 되어있다면

 


class ToDoRepository:
    def __int__(self, session: Session):
        self.session = session

    def get_todos(self) -> List[ToDo]:
        return list(self.session.scalars(select(ToDo)))

만약

controller, service , repository 로 구조를 변경한다고 했을때도

controller 에서 부터

todo_repo: ToDoRepository = Depends(ToDoRepository)

를 작성해서 service -> repository 까지 끌고와야 할까요 ??

 

 

답변 1

답변을 작성해보세요.

0

네, FastAPI를 사용하신다면 그렇습니다. FastAPI의 Depends는 재귀적으로 호출되기 때문에 연관된 컴포넌트를 DI로 주입해주셔야 합니다.

다만 컴포넌트를 어디에 어떻게 주입할 지는 어떤 소프트웨어 아키텍쳐를 적용할 지에 따라 다를 수 있습니다.

SJ님의 프로필

SJ

질문자

2023.08.26

감사합니다 !