Agrupar dependencias relacionadas en métodos de extensión personalizados es una forma muy común de hacerlo. ASP.NET Core ya hace esto para muchos de los servicios internos, y puede expandirse fácilmente además de eso y configurarlos de la manera que necesite para su aplicación. Por ejemplo, para configurar la autenticación y la autorización:
public IServiceCollection AddSecurity(this IServiceCollection services)
{
services.AddAuthentication()
.AddCookie();
service.AddAuthorization(options =>
{
options.DefaultPolicy = …;
});
return services;
}
Puede hacer lo mismo para sus servicios específicos de la aplicación y agruparlos lógicamente en métodos de extensión separados.
Si tiene muchos registros de servicio que son muy similares, también puede emplear un registro basado en convenciones, por ejemplo, utilizando Scrutor . Por ejemplo, esto registra todos los servicios dentro de un determinado espacio de nombres como transitorios para su interfaz respectiva:
services.Scan(scan => scan
.FromAssemblyOf<Startup>()
.AddClasses(c => c.InNamespaces("MyApp.Services"))
.AsImplementedInterfaces()
.WithTransientLifetime()
);
Scrutor permite reglas muy complejas para buscar servicios, por lo que si sus servicios siguen algún patrón, es probable que pueda encontrar una regla para eso.