Castle Windsor ASP.NET Core / Microsoft.Extensions.DependencyInjection Adapter
June 2, 2026 ยท View on GitHub
This library is a Castle Windsor adapter for Microsoft.Extensions.DependencyInjection nuget package. It works for ASP.NET Core and other type of applications.
How To Use?
- Install Puget Package
Install-Package Castle.Windsor.MsDependencyInjection
- Change Startup Class For ASP.NET Core, open your Startup class and add these using statements:
using Castle.Windsor;
using Castle.Windsor.MsDependencyInjection;
Find ConfigureServices method:
public void ConfigureServices(IServiceCollection services)
{
...
}
Change it like that:
public IServiceProvider ConfigureServices(IServiceCollection services)
{
...
return WindsorRegistrationHelper.CreateServiceProvider(new WindsorContainer(), services);
}
Changed return type from void to IServiceProvider and used WindsorRegistrationHelper.
Keyed Services
The adapter natively supports keyed services without requiring any changes to Castle Windsor. Keyed and non-keyed registrations are fully isolated: resolving IEnumerable<T> returns only non-keyed services, while keyed lookups return only services registered under the requested key.
You register and resolve keyed services exactly as you would with the default Microsoft DI container:
services.AddKeyedSingleton<INotifier, EmailNotifier>("email");
services.AddKeyedSingleton<INotifier, SmsNotifier>("sms");
var provider = WindsorRegistrationHelper.CreateServiceProvider(new WindsorContainer(), services);
var email = provider.GetRequiredKeyedService<INotifier>("email");
var sms = provider.GetKeyedService<INotifier>("sms");
The [FromKeyedServices] and [ServiceKey] constructor attributes are also supported:
public class OrderProcessor
{
public OrderProcessor([FromKeyedServices("email")] INotifier notifier)
{
...
}
}
The KeyedService.AnyKey registration moniker is supported as well โ a service registered with AnyKey is resolved for any requested key.
Note: This release targets the .NET 10 keyed-services specification. Because of breaking changes in .NET 10 around
KeyedService.AnyKey, the adapter implements the latest spec only.