返回

自用脚手架+Snowy框架搭建后台管理系统(11)- 使用装饰器方式注入类形式依赖项

后端

前言:

在之前定义我们的逻辑处理时,我个人是通过定义类的方式来处理,如下的代码所示:

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装饰器来注入类形式依赖项。