重新启动IIS网站后尚未注册类

本文关键字:注册 IIS 网站 重新启动 | 更新日期: 2023-09-27 18:26:45

我在IIS中创建了一个网站。重建我的应用程序,一切正常,但在重新启动IIS网站后,出现了一个错误:

Autofac.Core.Registration.ComponentNotRegisteredException:已注册的服务"WYC.Core.Services.BlogService"尚未注册。若要避免此异常,请注册一个组件以提供服务,使用IsRegistered()检查服务注册,或者使用ResolveOption()方法解析可选依赖项。

发生了什么事?为什么?我的方式:

container.RegisterAssemblyTypes(assemblies)
         .Where(t => t.Name.EndsWith("Service"))
         .SingleInstance()
         .PropertiesAutowired(PropertyWiringOptions.AllowCircularDependencies);

重新启动IIS网站后尚未注册类

IIS回收应用程序池时,会根据需要加载程序集。不建议在IIS中使用AppDomain.CurrentDomain.GetAssemblies(),因为可能尚未加载所有程序集。

为了避免此问题,您可以在System.Web.Compilation.BuildManager 上使用GetReferencedAssemblies方法

var assemblies = BuildManager.GetReferencedAssemblies();
container.RegisterAssemblyTypes(assemblies)
         .Where(t => t.Name.EndsWith("Service"))
         .SingleInstance()
         .PropertiesAutowired(PropertyWiringOptions.AllowCircularDependencies);

上面的代码应该在IIS回收过程之后工作。

有关详细信息,请参阅IIS重新启动后为什么不扫描我的程序集。