/ / Autofac no siempre resuelve mis dependencias - c #, asp.net-mvc, dependency-injection, autofac

Autofac no siempre resuelve mis dependencias - c #, asp.net-mvc, dependency-injection, autofac

Cuando construyo mis proyectos en mi Visual Studio 2013En el entorno de desarrollo profesional, hay veces que mis repositorios en mis controladores son nulos porque autofac no los resuelve correctamente. Esto sucede aproximadamente el 30% del tiempo.

Aquí está el código de inicialización de Autofac que utilizo:

public class AutofacConfig
{
public static void ConfigureAutofac()
{
var assemblies = AppDomain.CurrentDomain.GetAssemblies();
var builder = new ContainerBuilder();
builder.RegisterControllers(typeof(MvcApplication).Assembly);
builder.RegisterSource(new ViewRegistrationSource());
builder.RegisterFilterProvider();

builder.RegisterAssemblyTypes(assemblies)
.Where(t => t.Name.EndsWith("Repository"))
.AsImplementedInterfaces()
.InstancePerRequest();

var container = builder.Build();
DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
}
}

La mayoría de las veces cuando reconstruyo el proyecto o salgo y vuelvo, el problema está solucionado.

Respuestas

4 para la respuesta № 1

Parece que está utilizando el escaneado de ensamblaje para cargar sus dependencias. Este es un comportamiento conocido de IIS y se explica en la documentación de Autofac: ¿Por qué no se escanean mis ensamblajes después de reiniciar IIS?

Al alojar aplicaciones en IIS, todos los ensamblajes se cargan en el AppDomain cuando la aplicación se inicia por primera vez, pero cuando el AppDomain IIS lo recicla, los ensamblajes solo se cargan a pedido.

Para evitar este problema use el GetReferencedAssemblies() método en System.Web.Compilation.BuildManager para obtener una lista de los ensamblados referenciados en su lugar:

var assemblies = BuildManager.GetReferencedAssemblies().Cast<Assembly>();

Eso obligará a que los ensamblajes referenciados se carguen en el AppDomain Inmediatamente poniéndolos a disposición para la exploración del módulo.