/ / Autofac не завжди вирішує мої залежності - c #, asp.net-mvc, injection-injection, autofac

Autofac не завжди вирішує мої залежності - c #, asp.net-mvc, injection-dependent, autofac

Коли я будую свої проекти в моїй Visual Studio 2013Професійне середовище розробки, є моменти, коли мої репозиторії в моїх контролерах є нульовими, тому що autofac не вирішує їх належним чином. Це відбувається приблизно в 30% часу.

Я використовую код ініціалізації 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 негайно зробити їх доступними для сканування модулів.