Saltar al contenido

asp.net 5 inyección de dependencia en múltiples proyectos

Solución:

Mi pregunta es, ¿cómo puedo poner la ‘construcción’ del contenedor DI de los repositorios en mis servicios en mi proyecto principal. De esta manera, mi API está vagamente acoplada al hecho de que mis servicios usan Entity Framework, por lo que puedo cambiar a, por ejemplo, mongodb sin cambiar mi proyecto de API.

Tu podrías, pero tu no debería Haz eso.

La inyección de dependencias es la práctica de crear clases poco acopladas en todas las bibliotecas que se pueden conectar juntas (a menudo de muchas formas).

Sin embargo, cada aplicación debe tener una raíz de composición, que es el único lugar de la aplicación donde colocamos el acoplamiento código. Nuestro primer instinto como desarrolladores es intentar agrupar el código de acoplamiento en su propia biblioteca, pero ese es un impulso al que debe resistir. Consulte la composición de la reutilización de raíces.

La ilustración de Mark Seeman lo resume bien. Evitar las dependencias transitivas es lo que deseado al usar DI para aplanar el gráfico de dependencia. Esto garantiza que los ensamblajes se puedan usar / probar de forma aislada sin arrastrar dependencias innecesarias, lo que a su vez facilita el mantenimiento.

Dicho esto, muchos contenedores DI tienen una forma de organizar la configuración de ciertas partes de la aplicación mediante el uso de módulos. En Autofac, la documentación de los módulos está aquí.

Puede agregar fácilmente un método de extensión de IServiceCollection en su capa de servicios y usarlo para registrar sus propias dependencias. Luego, en el inicio, simplemente llame al método en la capa de servicio sin tener ninguna referencia a EntityFramework en su aplicación web.

using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.DependencyInjection.Extensions;

namespace your.service.layer
{
    public static class MyServiceCollectionExtensions
    {
        public static IServiceCollection AddMyServiceDependencies(this IServiceCollection services)
        {
            services.AddScoped<My.Data.Tier.DbContext, My.Data.Tier.DbContext>();
        }
    }

}

Puesta en marcha:

using your.service.layer;

public void ConfigureServices(IServiceCollection services)
{
    services.AddMyServiceDependencies();
}

Ahora su aplicación web solo necesita una referencia a su capa de servicio y no depende directamente de EntityFramework.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *