隐藏页面特效

pinject依赖注入模块

pinject 是一个基于 Python 的轻量级依赖注入库,可以方便地实现依赖注入的功能。 下面我们将通过一个简单的示例来演示如何使用 pinject 实现依赖注入。 首先,我们需要安装 pinject 库: pip install pinject 接下来,我们创建两个类:一个名为 EmailSender 的邮件发送器类,另一个名为 NewsletterManager 的新闻通讯管理器类。 其中,NewsletterManager 类依赖于 EmailSender 类,因为它需要调用 EmailSender.send_email() 方法来发送邮件。 python class EmailSender: def send_email(self, to_addr: str, subject: str, body: str): print(f"Sending email to {to_addr}\nSubject: {subject}\nBody: {body}") class NewsletterManager: def __init__(self, email_sender: EmailSender): self.email_sender = email_sender def send_newsletter(self, recipients: List[str], subject: str, body: str): for recipient in recipients: self.email_sender.send_email(recipient, subject, body) 然后,我们使用 pinject 注册这两个类,并使用 inject 装饰器来实现依赖注入。 inject 装饰器将自动检测所有参数类型,并尝试为其注入合适的实例。 import pinject class AppModule(pinject.BindingSpec): @pinject.provider def provide_email_sender(self) -> EmailSender: return EmailSender() @pinject.provider def provide_newsletter_manager(self, email_sender: EmailSender) -> NewsletterManager: return NewsletterManager(email_sender) class App: @pinject.inject def __init__(self, newsletter_manager: NewsletterManager): self.newsletter_manager = newsletter_manager if __name__ == '__main__': obj_graph = pinject.new_object_graph(binding_specs=[AppModule]) app = obj_graph.provide(App) recipients = ['alice@example.com', 'bob@example.com'] app.newsletter_manager.send_newsletter(recipients, 'Newsletter', 'Hello from our company!') 在这个示例中,我们定义了名为 AppModule 的类, 并使用 pinject.provider 装饰器定义了两个提供者方法:provide_email_sender() provide_newsletter_manager()。 provide_email_sender() 方法返回一个新的 EmailSender 实例;provide_newsletter_manager() 方法接受一个 EmailSender 参数并返回一个新的 NewsletterManager 实例。 然后,我们定义了一个名为 App 的类,并使用 pinject.inject 装饰器将其构造函数标记为可注入的。 App 类的构造函数中,我们注入了一个 NewsletterManager 实例,并将其存储在 self.newsletter_manager 属性中。 在主程序中,我们首先创建了一个 AppModule 实例,并通过 new_object_graph() 方法创建了一个新的对象图。 然后,我们调用 obj_graph.provide() 方法来创建一个新的 App 实例,并将其存储在 app 变量中。 最后,我们调用 app.newsletter_manager.send_newsletter() 方法来发送新闻通讯邮件。 在这个示例中,pinject 自动检测到 NewsletterManager 的构造函数需要一个 EmailSender 实例, 并使用 provide_email_sender() 方法提供了一个合适的实例。这样,我们就实现了依赖注入的功能。

__EOF__

本文作者404 Not Found
本文链接https://www.cnblogs.com/weiweivip666/p/17297359.html
关于博主:可能又在睡觉
版权声明:转载请注明出处
声援博主:如果看到我睡觉请喊我去学习
posted @   我在路上回头看  阅读(136)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
历史上的今天:
2021-04-07 将模型对象转换为json字典:model_to_dict
点击右上角即可分享
微信分享提示