Skip to main content

Truly Amazing Inversion of control Python library Analogous to .Net's DI

Project description

Taipan-DI

Truly Amazing Inversion of control Python library Analogous to .Net's DI

Taipan-DI is a Dependency Injection library whose goal is to provide a behaviour similar to .Net's DI system.

Features

  • Lightweight
  • No decorators
  • No hidden behaviour (what you write is what you get)
  • Automatic dependency injection on service resolving
  • Type hinting
  • No global container by default
  • Singleton and factory scopes
  • Register pipelines easily

Constraints

  • Based purely on types (not on strings)
  • No automatic registration
  • It is necessary to write an __init__ function or use @dataclass

Installation

Pip

pip install taipan-di

Poetry

Poetry is a Python dependency management and packaging tool. I actually use it for this project.

poetry add taipan-di

Usage

First, you have to create a DependencyCollection in which you will register your services. Each DependencyCollection is independant and contain different services.

services = DependencyCollection()

Then, register your services as you wish. They can be registered as factories or singletons using the following methods :

  • services.register_factory(InterfaceType, ImplementationType)
  • services.register_singleton(InterfaceType, ImplementationType)

You can also provide a creator method or an instance (for singletons only) that will be used when resolving the services :

  • services.register_factory_creator(Type, lambda provider: create(provider))
  • services.register_singleton_creator(Type, lambda provider: create(provider))
  • services.register_singleton_instance(Type, instance)

You can also register pipelines. Examples are given in the test files.

Once your services are registered, you have to build a dependency provider which will be used to resolve services :

provider = services.build()
resolved = provider.resolve(InterfaceType)

If ImplementationType has a constructor dependency, it will be automatically resolved, as long as the dependency has been registered in the DependencyCollection.

Inspirations

This library is partially based on the kink dependency injection library. I was using kink on another project previously but it didn't fit all my requirements.

I also took inspiration from the injector library and .Net's dependency injection system.

TODO

This library isn't stable yet and a lot of things can still be improved. If there is something you want to see added or if something does not work as you want it to, feel free to open an issue.

Here is a list of features I have in mind and will be working on :

  • Modify the registration process / methods to better handle type conditions and protocols
  • Create configuration from environment or configuration files

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

taipan_di-0.0.6.tar.gz (8.7 kB view details)

Uploaded Source

Built Distribution

taipan_di-0.0.6-py3-none-any.whl (14.6 kB view details)

Uploaded Python 3

File details

Details for the file taipan_di-0.0.6.tar.gz.

File metadata

  • Download URL: taipan_di-0.0.6.tar.gz
  • Upload date:
  • Size: 8.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.5.1 CPython/3.9.17 Linux/5.15.0-1039-azure

File hashes

Hashes for taipan_di-0.0.6.tar.gz
Algorithm Hash digest
SHA256 b79a3ddeb24066289e73b2d8bad6581afb9563e0d593b43e3f2a4eb38df4ae77
MD5 20a989369362a1be52a2474ef265789a
BLAKE2b-256 af362a226dbe6f43ebf1969884b5d28457892d6f9e14871687cf68f0036bb28d

See more details on using hashes here.

File details

Details for the file taipan_di-0.0.6-py3-none-any.whl.

File metadata

  • Download URL: taipan_di-0.0.6-py3-none-any.whl
  • Upload date:
  • Size: 14.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.5.1 CPython/3.9.17 Linux/5.15.0-1039-azure

File hashes

Hashes for taipan_di-0.0.6-py3-none-any.whl
Algorithm Hash digest
SHA256 6f378024e8b0a81d7d054520fe665e78190e94fffa52857e143c4d8a2195e232
MD5 805b1f182eb038dc7658829fae7e3a1b
BLAKE2b-256 3d4d1b452888f37c869a5c17ef51179da83dab6e7bd5db4b9e1b350a27e8b3be

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page