返回
自用脚手架+Snowy框架搭建后台管理系统(11)- 使用装饰器方式注入类形式依赖项
后端
2024-01-03 08:06:47
前言:
在之前定义我们的逻辑处理时,我个人是通过定义类的方式来处理,如下的代码所示:
from fastapi import Depends
from logic import DoLoginController
async def get_user(login_controller: DoLoginController = Depends(DoLoginController)):
return await login_controller.get_user()
在上面的代码中,我们是通过Depends(DoLoginController)
的方式实现我们定义的类实现的,其目的是为了在需要的时候自动创建DoLoginController
类的实例并注入到函数中。
使用装饰器方式注入类形式依赖项:
为了简化代码并提高可读性,我们可以使用装饰器的方式来注入类形式依赖项。我们可以定义一个装饰器,该装饰器将自动创建和注入类实例。
from fastapi import Depends
def inject_class(cls):
async def wrapper(func):
async def inner(*args, **kwargs):
instance = cls()
return await func(instance, *args, **kwargs)
return inner
return wrapper
class DoLoginController:
async def get_user(self):
return "Hello, world!"
@inject_class(DoLoginController)
async def get_user(login_controller):
return await login_controller.get_user()
在上面的代码中,我们定义了一个名为inject_class
的装饰器,该装饰器接受一个类作为参数。装饰器返回一个函数,该函数接受一个函数作为参数。当装饰器被应用到函数时,装饰器将自动创建和注入类实例到函数中。
例如,在上面的代码中,我们使用@inject_class(DoLoginController)
装饰了get_user
函数。当get_user
函数被调用时,装饰器将自动创建DoLoginController
类的实例并注入到函数中。然后,函数可以使用login_controller
参数来访问DoLoginController
类的实例。
使用装饰器方式注入类形式依赖项的好处:
使用装饰器方式注入类形式依赖项有很多好处,包括:
- 简化代码:装饰器可以帮助我们简化代码,因为我们不需要手动创建和注入类实例。
- 提高可读性:装饰器可以提高代码的可读性,因为我们可以更清楚地看到类实例是如何被注入到函数中的。
- 提高灵活性:装饰器可以提高代码的灵活性,因为我们可以很容易地改变类实例的创建方式。
结论:
使用装饰器方式注入类形式依赖项是一种简化代码、提高可读性和灵活性的好方法。在FastApi框架中,我们可以使用inject_class
装饰器来注入类形式依赖项。