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();
    }
}

autofacc随机无参数公共构造函数.错误

我有一个这样的问题。我的问题是我没有在应用程序入口点(全局)设置DependencyResolver.SetResolver();GlobalConfiguration.Configuration.DependencyResolver。asax Application_Start)。所以ASP。. NET无法解决我的依赖关系在我的控制器,然后我得到了同样的异常。

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

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

在我的例子中,我只是没有深入了解堆栈跟踪。在内部异常的更深处是实际的错误,可能是由于Autofac无法定位依赖项。