我有一个使用 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(使用前将#替换为@)