Autofac在Web上失去注册.配置编辑

cec*_*lip 4 web-config autofac asp.net-web-api

我有一个分层的Web应用程序,我使用ASP.NET MVC 4,WebAPI和一些其他组件构建.我正在使用最新版本的Autofac 2.6.2.859作为我的DI容器以及MVC和WebAPI集成.我在不同的层中设置了autofac模块,我正在使用新的RegisterAssemblyModules扫描各种模块的AppDomain程序集.

在启动时,每个都很有效.当我编辑web.config文件并且应用程序变热时,我的注册会丢失.我得到一个DependencyResolutionException -

可以使用可用的服务和参数调用在"My.Class.Name"类型上找到"公共绑定标志"的构造函数:

所以我的注册没有被重新加载.有谁知道如何解决这个问题?我应该将我的初始化代码放在Application_Start()以外的其他地方吗?

UPDATE

这是我的代码的样子

 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));
    }
}
Run Code Online (Sandbox Code Playgroud)

Ale*_*ves 8

我认为问题是所有程序集在应用程序首次启动时都会加载到AppDomain中,但是当IIS回收AppDomain时,程序集只会按需加载.

尝试使用GetReferencedAssemblies方法System.Web.Compilation.BuildManager来获取引用的程序集的列表.

var assemblies = BuildManager.GetReferencedAssemblies().Cast<Assembly>();
Run Code Online (Sandbox Code Playgroud)

这应该强制将引用的程序集加载到AppDomain中,使其可用于模块扫描.