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)
我认为问题是所有程序集在应用程序首次启动时都会加载到AppDomain中,但是当IIS回收AppDomain时,程序集只会按需加载.
尝试使用GetReferencedAssemblies方法System.Web.Compilation.BuildManager来获取引用的程序集的列表.
var assemblies = BuildManager.GetReferencedAssemblies().Cast<Assembly>();
Run Code Online (Sandbox Code Playgroud)
这应该强制将引用的程序集加载到AppDomain中,使其可用于模块扫描.
| 归档时间: |
|
| 查看次数: |
4023 次 |
| 最近记录: |