How can I use Castle Windsor as an IOC instead of the default .net core IOC container?
I have built a service resolver that depends on WindsorContainer
to resolve services.
Something like:
public class ServiceResolver
{
private static WindsorContainer container;
public ServiceResolver()
{
container = new WindsorContainer();
// a method to register components in container
RegisterComponents(container);
}
public IList<T> ResolveAll<T>()
{
return container.ResolveAll<T>().ToList();
}
}
Can not figure out how to let my .net core 2 web API use this resolver as a replacement for IServiceCollection.
There is an official Castle Windsor support for ASP.NET Core which has been released as version 5 (get it from nuget Castle.Windsor, Castle.Facilities.AspNetCore). The documentation how to use it is here.
More info in the related issues here and here
For others Reference In addition to the solution Nkosi provided.
There is a nuget package called Castle.Windsor.MsDependencyInjection that will provide you with the following method:
Which's returned type is
IServiceProvider
and you will not need to create you own wrapper.So the solution will be like:
and in Startup...
For .net core, which centers DI around the
IServiceProvider
, you would need to create you own wrapperReference : Introduction to Dependency Injection in ASP.NET Core: Replacing the default services container
and then configure the container in
ConfigureServices
and return anIServiceProvider
:At runtime, your container will be used to resolve types and inject dependencies.
I wanted to add that answer Yahya Hussein offers works for me, however I had to adjust my scope to
LifestyleCustome<MsScopedLifestyleManager>()
on each dependency I registered.This may be second nature to some but it took me a minute to figure out.