What's the Microsoft DI equivalent of Castle.Windsor's UsingFactoryMethod

93 Views Asked by At

Here is an example using Castle Windsor

Component.For<MultiInstanceFactory>().UsingFactoryMethod<MultiInstanceFactory>(k => t => (IEnumerable<object>)k.ResolveAll(t));

Where the MultiInstanceFactory is a delegate like so:

public delegate IEnumerable<object> MultiInstanceFactory(Type serviceType);

What would be the Microsoft DI equivalent of this?

Thanks guys

2

There are 2 best solutions below

1
Daniel A. White On

It is simply

serviceContainer.Add{Singleton|Transient|Scoped}<YourInterface>(sp => factoryHere);

You there are plenty of overloads.

Here is the documentation for AddSingleton

0
Egli Becerra On

In case anyone needs a similar solution

services.AddTransient<MultiInstanceFactory>(serviceProvider => {
            var componentFactory = serviceProvider.GetRequiredService<IServiceProvider>();
            return (Type type) =>
            {
                var instances = serviceProvider.GetServices(type);
                return instances.Cast<object>();
            };
        });