gpt4 book ai didi

c# - Autofac 随机无参数公共(public)构造函数。错误

转载 作者:行者123 更新时间:2023-11-30 14:10:15 26 4
gpt4 key购买 nike

我有一个 MVC/WebApi 应用程序。我开始使用 Autofac 来解决这个问题。

Autofac 有效。但是,我会随机收到错误消息:

尝试创建“SomeController”类型的 Controller 时发生错误。确保 Controller 具有无参数公共(public)构造函数。

当我清理解决方案并重建时。并且没有更多的错误。我认为这是我的 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();
}
}

最佳答案

我遇到过这样的问题。我的问题是我没有在应用程序入口点(Global.asax、Application_Start)中设置 DependencyResolver.SetResolver();GlobalConfiguration.Configuration.DependencyResolver。所以 ASP.NET 无法解决我在 Controller 中的依赖关系,然后我得到了同样的异常。

在应用程序启动的第一刻设置依赖解析器,解决了我的问题。

在您的情况下,正如您所说的清理和重建解决方案有效,问题可能在于您如何让程序集在 Autofac 中注册。尝试记录调用 GetLocalAssemblies 时正在注册的每个程序集,并查看是否正在注册具有 Controller 的程序集和具有依赖项的程序集。

关于c# - Autofac 随机无参数公共(public)构造函数。错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24920948/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com