Autofac теряет регистрацию в Web.Config Edit

У меня есть многоуровневое веб-приложение, которое я создал с помощью ASP.NET MVC 4, WebAPI и некоторых других компонентов. Я использую последнюю версию Autofac 2.6.2.859 в качестве контейнера DI вместе с интеграциями MVC и WebAPI. У меня установлены модули autofac на разных уровнях, и я использую новые RegisterAssemblyModules для сканирования сборок AppDomain для различных модулей.

При запуске все отлично работает. Когда я редактирую файл web.config и приложение нагревается, мои регистрации теряются. Я получаю исключение DependencyResolutionException -

Ни один из конструкторов, обнаруженных с «общедоступными флагами привязки» для типа «My.Class.Name», не может быть вызван с доступными службами и параметрами:

Так что мои регистрации не перезагружаются. Кто-нибудь знает, как решить эту проблему? Должен ли я поместить свой код инициализации в другое место, кроме Application_Start ()?

ОБНОВЛЕНИЕ

Вот как выглядит мой код

 public static class IoC
{
    public static void Configure()
    {
        var builder = new ContainerBuilder();
        var assemblies = AppDomain.CurrentDomain.GetAssemblies();

        //Assembly Modules            
        builder.RegisterAssemblyModules<NSUTriviaModuleBase>(assemblies);

        // Register API controllers using assembly scanning.
        builder.RegisterControllers(assemblies);

        // Register API controllers using assembly scanning.
        builder.RegisterApiControllers(assemblies);

        var container = builder.Build();
        // Set the dependency resolver implementation.
        var resolver = new AutofacWebApiDependencyResolver(container);

        GlobalConfiguration.Configuration.DependencyResolver = resolver;
        DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
    }
}

person cecilphillip    schedule 15.06.2012    source источник
comment
Интересно - вы запускаете это во время отладки, например в Cassini или IIS Express, или это то, что вы делаете в продакшене? :)   -  person Nicholas Blumhardt    schedule 15.06.2012
comment
Он работает в режиме отладки на удаленном промежуточном сервере с IIS 6 и .NET 4.0. Он отлично работает на IIS 7.5 Express локально. Ошибки возникают только при повторном использовании.   -  person cecilphillip    schedule 15.06.2012
comment
Можете ли вы установить трассировку / ведение журнала для проверки состояний DependencyResolvers при возникновении ошибки? Они оба по-прежнему Autofac?   -  person Jim Bolla    schedule 16.06.2012
comment
Мы пробовали решение от Alex Meyer-Gleaves, но оно все еще не работает. Мы используем IIS Express / VS2012. По крайней мере, мы можем надежно воспроизвести его с помощью редактирования web.config!   -  person SturmUndDrang    schedule 30.05.2013


Ответы (1)


Я думаю, проблема в том, что все сборки загружаются в AppDomain при первом запуске приложения, но когда AppDomain перерабатывается IIS, сборки загружаются только по запросу.

Вместо этого попробуйте использовать метод GetReferencedAssemblies на System.Web.Compilation.BuildManager, чтобы получить список сборок, на которые есть ссылки.

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

Это должно вызвать немедленную загрузку указанных сборок в AppDomain, что сделает их доступными для сканирования модулей.

person Alex Meyer-Gleaves    schedule 20.06.2012