C# Autofac不总是解析我的依赖项
当我在Visual Studio 2013 Professional开发环境中构建项目时,有时控制器中的存储库都为空,因为autofac无法正确解析它们。这种情况大约有30%的时间发生 以下是我使用的Autofac初始化代码:C# Autofac不总是解析我的依赖项,c#,asp.net-mvc,dependency-injection,autofac,C#,Asp.net Mvc,Dependency Injection,Autofac,当我在Visual Studio 2013 Professional开发环境中构建项目时,有时控制器中的存储库都为空,因为autofac无法正确解析它们。这种情况大约有30%的时间发生 以下是我使用的Autofac初始化代码: public class AutofacConfig { public static void ConfigureAutofac() { var assemblies = AppDomain.CurrentDomain.GetAssembl
public class AutofacConfig
{
public static void ConfigureAutofac()
{
var assemblies = AppDomain.CurrentDomain.GetAssemblies();
var builder = new ContainerBuilder();
builder.RegisterControllers(typeof(MvcApplication).Assembly);
builder.RegisterSource(new ViewRegistrationSource());
builder.RegisterFilterProvider();
builder.RegisterAssemblyTypes(assemblies)
.Where(t => t.Name.EndsWith("Repository"))
.AsImplementedInterfaces()
.InstancePerRequest();
var container = builder.Build();
DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
}
}
大多数时候,当我重建项目或退出并返回项目时,问题已经解决 看起来您正在使用程序集扫描加载依赖项。这是IIS的已知行为,Autofac文档对此进行了解释: 当在IIS中托管应用程序时,当应用程序首次启动时,所有程序集都加载到
AppDomain
,但当IIS回收AppDomain
时,程序集仅按需加载
要避免此问题,请使用System.Web.Compilation.BuildManager
上的getReferenceAssemblys()
方法来获取引用程序集的列表:
var assemblies = BuildManager.GetReferencedAssemblies().Cast<Assembly>();
var assemblies=BuildManager.getReferencedAssemblys().Cast();
这将强制将引用的程序集加载到AppDomain
中,使其立即可用于模块扫描
西里尔,谢谢你。这完全解决了我的问题。我只需要在我的案例结尾添加.ToArray(),但在过去的几周里,一切都很顺利。