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