Introduction to Injectinto
Injectinto is a powerful and flexible dependency injection library for Python, allowing for seamless and efficient dependency management within your applications. In this guide, we will explore the key features of Injectinto and provide numerous API examples to help you get started.
Getting Started
First, you’ll need to install Injectinto. You can do this via pip:
pip install injectinto
Key API Features of Injectinto
Creating and Using Injectors
Injectors are central to how Injectinto works. Here is an example of creating and using an injector:
from injectinto import Injector, injectable, inject class DatabaseService: def connect(self): return "Connected to the database!" class Service: @inject def __init__(self, db: DatabaseService): self.db = db def perform_action(self): return self.db.connect() injector = Injector() injector.register(DatabaseService) service = injector.inject(Service) print(service.perform_action())
Using Factories
Factories can be used to provide custom instances:
class Config: def __init__(self, setting): self.setting = setting def config_factory(): return Config("custom setting") injector.register(Config, factory=config_factory) config = injector.inject(Config) print(config.setting)
Singletons
Register singletons to ensure a class has only one instance:
injector.register_singleton(DatabaseService) db_service1 = injector.inject(DatabaseService) db_service2 = injector.inject(DatabaseService) print(db_service1 is db_service2) # True
Using Named Bindings
Named bindings allow you to distinguish between different instances of the same class:
class MessageService: def __init__(self, prefix): self.prefix = prefix def sms_service(): return MessageService("SMS:") def email_service(): return MessageService("EMAIL:") injector.register(MessageService, name="sms", factory=sms_service) injector.register(MessageService, name="email", factory=email_service) sms = injector.inject(MessageService, name="sms") email = injector.inject(MessageService, name="email") print(sms.prefix) # SMS: print(email.prefix) # EMAIL:
Example Application
Finally, let’s put it all together in a simple application:
from injectinto import Injector, inject, singleton class AuthService: def authenticate(self, token): return f"Authenticating {token}..." class AppService: @inject def __init__(self, auth: AuthService): self.auth = auth def run(self, token): return self.auth.authenticate(token) def main(): injector = Injector() injector.register_singleton(AuthService) injector.register(AppService) app_service = injector.inject(AppService) result = app_service.run("my_secure_token") print(result) if __name__ == "__main__": main()
With these examples, you should have a solid foundation to start using Injectinto in your own projects. Happy coding!
Hash: 5ab0a1609feaedda8aab36fcc9690cf07efc49bd45c5498aa6066bdb692f9a4e