title | summary | reviewed | component | related | redirects | ||||
---|---|---|---|---|---|---|---|---|---|
NServiceBus.Extensions.DependencyInjection |
Integration with Microsoft.Extensions.DependencyInjection |
2023-06-02 |
Extensions.DependencyInjection |
|
|
Warning
Starting with NServiceBus version 8, the NServiceBus.Extensions.DependencyInjection
package is no longer required. NServiceBus directly supports the Microsoft.Extensions.DependencyInjection
model via the externally managed container mode. Visit the dependency injection upgrade guide for further information.
The NServiceBus.Extensions.DependencyInjection
package provides integration with the Microsoft.Extensions.DependencyInjection
dependency injection abstraction.
Note
It's recommended to use Microsoft Generic Host to manage application and dependency injection container lifecycle. Use the NServiceBus.Extensions.Hosting package to host an NServiceBus endpoint with the generic host.
The following snippet shows how to configure NServiceBus to use Microsoft's built-in dependency injection container:
snippet: usecontainer-servicecollection
NServiceBus can be configured to work with any third party dependency injection container which implements the Microsoft.Extensions.DependencyInjection
abstraction. To use a third-party dependency injection container, pass the specific container's IServiceProviderFactory
to the UseContainer
configuration method.
snippet: AutofacUsage
snippet: CastleUsage
snippet: StructureMapUsage
snippet: UnityUsage
UseContainer
provides a settings class which gives advanced configuration options:
The settings provide access to the underlying IServiceCollection
that can be used to add additional service registrations.
snippet: settings-servicecollection
Third-party container-native APIs can be accessed by with ConfigureContainer
.
snippet: settings-configurecontainer
DependencyLifecycle
maps to ServiceLifetime as follows:
DependencyLifecycle |
Service Lifetime |
---|---|
InstancePerCall | ServiceLifetime.Transient |
InstancePerUnitOfWork | ServiceLifetime.Scoped |
SingleInstance | ServiceLifetime.Singleton |
The NServiceBus.Extensions.DependencyInjection
package does not support property injection out of the box. To enable property injection, refer to the configured container's documentation.
The package allows the container to be used in externally managed mode for full control of the dependency injection container via the EndpointWithExternallyManagedServiceProvider
extension point:
snippet: externally-managed-mode
Warning
IServiceCollection
and IServiceProvider
instances must not be shared across mutliple NServiceBus endpoints to avoid conflicting registration that might cause incorrect behavior or runtime errors.