requestdelegate net mvc iservicecollection injection framework dependency configureservices asp c# dependency-injection asp.net-core inversion-of-control

c# - net - mvc dependency injection



Asp.Net Core: registro de implementación con múltiples interfaces y estilo de vida Singleton (1)

Teniendo en cuenta las siguientes definiciones de interfaz y clase:

public interface IInterface1 { } public interface IInterface2 { } public class MyClass : IInterface1, IInterface2 { }

¿hay alguna manera de registrar una instancia de MyClass con múltiples interfaces como esta:

... services.AddSingleton<IInterface1, IInterface2, MyClass>(); ...

y resuelva esta instancia única de MyClass con diferentes interfaces como esta:

IInterface1 interface1 = app.ApplicationServices.GetService<IInterface1>(); IInterface2 interface2 = app.ApplicationServices.GetService<IInterface2>();


La colección de servicios por definición es una colección de ServiceDescriptor s, que son pares de tipo de servicio y tipo de implementación.

Sin embargo, puede solucionar esto creando su propia función de proveedor, algo como esto (gracias usuario7224827):

services.AddSingleton<IInterface1>(); services.AddSingleton<IInterface2>(x => x.GetService<IInterface1>());

Más opciones a continuación:

private static MyClass ClassInstance; public void ConfigureServices(IServiceCollection services) { ClassInstance = new MyClass(); services.AddSingleton<IInterface1>(provider => ClassInstance); services.AddSingleton<IInterface2>(provider => ClassInstance); }

Otra forma sería:

public void ConfigureServices(IServiceCollection services) { ClassInstance = new MyClass(); services.AddSingleton<IInterface1>(ClassInstance); services.AddSingleton<IInterface2>(ClassInstance); }

Donde solo damos la misma instancia.