/ / Autofac не винаги решава моите зависимости - c #, asp.net-mvc, зависимости-инжектиране, autofac

Autofac не винаги разрешава моите зависимости - c #, asp.net-mvc, dependency-injection, autofac

Когато създавам моите проекти в моето Visual Studio 2013Професионална среда за разработка, има моменти, когато моите хранилища в контролерите ми са нищожни, защото Autofac не ги разрешава правилно. Това се случва около 30% от времето.

Ето кода на Initialization на Autofac, който използвам:

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));
}
}

През по-голямата част от времето, когато REBUILD проекта или излизане и се върна, проблемът е фиксиран.

Отговори:

4 за отговор № 1

Изглежда, че използвате сканиране на монтаж, за да заредите зависимостите си. Това е известно поведение на IIS и е обяснено в документацията на Autofac: Защо моите събрания не се сканират след рестартирането на IIS?

При хостване на приложения в IIS всички модули се зареждат в AppDomain при първото стартиране на приложението, но когато AppDomain се рециклират от IIS, след това агрегатите се зареждат само при поискване.

За да избегнете този проблем използвайте GetReferencedAssemblies() метод на System.Web.Compilation.BuildManager за да получите списък на референтните събрания вместо това:

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

Това ще принуди посочените групи да бъдат заредени в AppDomain като ги направиха достъпни за сканиране на модули.