Dependency
Dependency injection for Elixir. Full documentation
Dependency injection allows you to swap out dependencies when unit testing your modules.
In test mode a Registry is used that holds a mapping between dependency name and implementation.
In dev and production mode, the dependency is compiled inline - there is no perormance hit.
Inspired by constantizer
Installation
The package can be installed by adding dependency to your list of dependencies in mix.exs:
def deps do
[
{:dependency, "~> 0.2.0"}
]
endAlso, you'll need to add the application to your list of applications
def application do
[
# ...
extra_applications: [:dependency],
]
endUsage
Resolving a dependency
import Dependency
mod = Dependency.resolve(MyModule)Registering an implementation
Dependency.register(MyModule, MyImplementation)Defining a constant
defmodule Example do
import Dependency
# define a public constant/accesor
defconst :foo, Foo
end
# call accesor to resolve dependecy
Example.foo == FooLicense
MIT