﻿# StructureMap


> [!WARNING]
> Starting with NServiceBus version 7, the dependency injection container adapter packages are no longer required. NServiceBus directly supports the `Microsoft.Extensions.DependencyInjection` model and third party containers can be integrated using the [NServiceBus.Extensions.DependencyInjection package](/nservicebus/dependency-injection/extensions-dependencyinjection.md) or via the [.NET Generic Host](https://learn.microsoft.com/en-us/dotnet/core/extensions/generic-host).
>
> In NServiceBus version 8, NServiceBus will no longer provide adapters for external dependency injection containers.
>
> Visit the [dependency injection upgrade guide](/nservicebus/upgrades/7to8/dependency-injection.md) for further information.


NServiceBus can be configured to use [StructureMap](https://structuremap.github.io/) for dependency injection.


## Default usage

<!-- snippet: StructureMap -->

```cs
endpointConfiguration.UseContainer<StructureMapBuilder>();
```

<!-- endsnippet -->


## Using an existing container

<!-- snippet: StructureMap_Existing -->

```cs
var container = new Container(
    action: expression =>
    {
        expression.For<MyService>()
            .Use(new MyService());
    });
endpointConfiguration.UseContainer<StructureMapBuilder>(
    customizations: customizations =>
    {
        customizations.ExistingContainer(container);
    });
```

<!-- endsnippet -->

## DependencyLifecycle Mapping

[`DependencyLifecycle`](/nservicebus/dependency-injection/index.md) maps to [StructureMap lifecycles](https://structuremap.github.io/object-lifecycle/supported-lifecycles/) as follows:

| `DependencyLifecycle`                                                                                             | StructureMap lifecycle                                                                        |
|-----------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|
| [InstancePerCall](/nservicebus/dependency-injection/index.md) | [AlwaysUnique](https://structuremap.github.io/object-lifecycle/supported-lifecycles/#sec1)     |
| [InstancePerUnitOfWork](/nservicebus/dependency-injection/index.md)                    | [ContainerScoped](https://structuremap.github.io/object-lifecycle/supported-lifecycles/#sec3) |
| [SingleInstance](/nservicebus/dependency-injection/index.md)                                  | [Singleton](https://structuremap.github.io/object-lifecycle/supported-lifecycles/#sec2)        |


## Property Injection

This dependency injection container adapter automatically enables property injection for known types. Use the `Func` overload of `.ConfigureComponent` to get full control over the injected properties if needed.
