Autofac 在 Web.Config 上丢失注册编辑

2024-04-01

我有一个使用 ASP.NET MVC 4、WebAPI 和其他一些组件构建的分层 Web 应用程序。我使用最新版本的 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));
    }
}

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

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

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

这应该会强制引用的程序集立即加载到 AppDomain 中,使它们可用于模块扫描。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Autofac 在 Web.Config 上丢失注册编辑 的相关文章

随机推荐