﻿# Castle Windsor


> [!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 [Castle Windsor](https://github.com/castleproject/Windsor) for dependency injection.


## Default usage

<!-- snippet: CastleWindsor -->

```cs
endpointConfiguration.UseContainer<WindsorBuilder>();
```

<!-- endsnippet -->


## Using an existing container

<!-- snippet: CastleWindsor_Existing -->

```cs
var container = new WindsorContainer();
var registration = Component.For<MyService>()
    .Instance(new MyService());
container.Register(registration);
endpointConfiguration.UseContainer<WindsorBuilder>(
    customizations: customizations =>
    {
        customizations.ExistingContainer(container);
    });
```

<!-- endsnippet -->

### DependencyLifecycle Mapping

[`DependencyLifecycle`](/nservicebus/dependency-injection/index.md) maps to [Castle's `LifestyleType`](https://github.com/castleproject/Windsor/blob/master/docs/lifestyles.md) as follows:


| `DependencyLifecycle`                                                                                             | `LifestyleType`                                                                           |
|-----------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------|
| [InstancePerCall](/nservicebus/dependency-injection/index.md) | [Transient](https://github.com/castleproject/Windsor/blob/master/docs/lifestyles.md#transient) |
| [InstancePerUnitOfWork](/nservicebus/dependency-injection/index.md)                    | [Scoped](https://github.com/castleproject/Windsor/blob/master/docs/lifestyles.md#scoped)       |
| [SingleInstance](/nservicebus/dependency-injection/index.md)                                  | [Singleton](https://github.com/castleproject/Windsor/blob/master/docs/lifestyles.md#singleton) |


## 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.
