Autofac失去上的Web.Config编辑注册记忆(Autofac Losing Registr

2019-09-18 03:23发布

我有我的ASP.NET MVC 4的WebAPI和其他一些组件构建分层的Web应用程序。 我使用Autofac 2.6.2.859的最新版本为我与MVC和的WebAPI整合功能DI容器。 我在不同的层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));
    }
}

Answer 1:

我认为这个问题是所有组件加载到AppDomain中第一个启动的应用程序时,但是当AppDomain中由IIS回收的组件,然后仅按需加载。

尝试使用GetReferencedAssemblies的方法System.Web.Compilation.BuildManager得到引用的组件列表来代替。

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

这应该迫使引用的程序被加载到AppDomain中立即使其可用于模块扫描。



文章来源: Autofac Losing Registrations on Web.Config Edit