This is a small library that wraps the container from Inversify using Svelte's context API. It is based on inversify-react which has the same concept but for React.
You simply initialize your container and use one of the two following methods to set your container to the context. For more information, you can check to the Inversify documentation.
You can either use the ContainerContext component :
<script lang="ts">
import { ContainerContext } from 'svelte-inversify';
import { Container } from 'inversify';
const container = new Container();
...
</script>
<ContainerContext {container}>
...
</ContainerContext>
Or simply use the setContainer
method like so :
<script lang="ts">
import { ContainerContext } from 'svelte-inversify';
import { Container } from 'inversify';
const container = new Container();
...
setContainer(container);
</script>
...
The ContainerContext component is just a wrapper around the setContainer
method.
To get an injectable, you can get the container directly using the getContainer
function :
<script lang="ts">
import { getContainer } from 'svelte-inversify';
import { Container } from 'inversify';
const container: Container = getContainer();
...
</script>
...
To get a dependency from your container, simply use getInjection<T>
function like so :
<script lang="ts">
import { getInjection } from 'svelte-inversify';
const foo = getInjection<Foo>('Foo');
foo.bar();
</script>
...
The key property from the getInjection
method takes the same types of arguments that the container would normally use.
You can also use the getAllInjections
function to get a list of injectables :
<script lang="ts">
import { getAllInjections } from 'svelte-inversify';
const foos = getAllInjections<Foo>('Foo');
foos.forEach(foo => foo.bar());
</script>
...
You can also use the getOptionalInjection
function to get an injectable or a default value if it hasn't been set :
<script lang="ts">
import { getOptionalInjection } from 'svelte-inversify';
const foos = getOptionalInjection<Foo>('Foo', container => new Foo());
foo.bar();
</script>
...