autofacc随机无参数公共构造函数.错误
本文关键字:构造函数 错误 参数 随机 autofacc | 更新日期: 2023-09-27 18:14:42
我有一个MVC/WebApi应用程序。我开始使用autoface这个解决方案。
Autofac作品。然而,我将随机收到错误:
尝试创建类型为"SomeController"的控制器时发生错误。确保控制器有一个无参数的公共构造函数。
当我清理溶液并重新构建时。没有更多的错误。我认为这是我的Visual Studio实例(可能需要运行修复)。然而,我刚刚试图发布到IIS,我又收到了错误。
有人遇到过这个问题吗?有人能帮我吗?
这里有一些代码细节:
所有的注册都是在模块中完成的,像这样:
public class CryptographyModule : Module
{
protected override void Load(ContainerBuilder builder)
{
builder.RegisterType<AesCryptographyService>()
.As<IAesCryptographyService>()
.InstancePerRequest();
}
}
我用它来引导Autofac:
public static class Bootstrapper
{
public static void Run()
{
BootStrapAutofac();
}
private static void BootStrapAutofac()
{
var builder = new ContainerBuilder();
var localAssemblies = GetLocalAssemblies();
builder.RegisterApiControllers(localAssemblies);
builder.RegisterControllers(localAssemblies);
builder.RegisterAssemblyModules(localAssemblies);
//build container
var container = builder.Build();
var webApiResolver = new AutofacWebApiDependencyResolver(container);
GlobalConfiguration.Configuration.DependencyResolver = webApiResolver;
var mvcResolver = new AutofacDependencyResolver(container);
DependencyResolver.SetResolver(mvcResolver);
}
private static Assembly[] GetLocalAssemblies()
{
return AppDomain.CurrentDomain.GetAssemblies()
.Where(a => a.GetName().Name.StartsWith("Loc"))
.ToArray();
}
}
我有一个这样的问题。我的问题是我没有在应用程序入口点(全局)设置DependencyResolver.SetResolver();
和GlobalConfiguration.Configuration.DependencyResolver
。asax Application_Start)。所以ASP。. NET无法解决我的依赖关系在我的控制器,然后我得到了同样的异常。
在应用程序启动的第一刻设置依赖解析器,解决了我的问题。
在您的情况下,正如您所说的清理和重建解决方案的工作,也许问题是如何让程序集在Autofac中注册。当您调用GetLocalAssemblies
时,尝试记录每个正在注册的程序集,并查看具有控制器的程序集和具有依赖项的程序集是否正在注册。
在我的例子中,我只是没有深入了解堆栈跟踪。在内部异常的更深处是实际的错误,可能是由于Autofac无法定位依赖项。