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.