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 № 1Parece 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 elAppDomain
IIS lo recicla, los ensamblajes solo se cargan a pedido.Para evitar este problema use el
GetReferencedAssemblies()
método enSystem.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.