加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – Autofac随机无参数公共构造函数.错误

发布时间:2020-12-16 02:02:35 所属栏目:百科 来源:网络整理
导读:我有一个MVC / WebApi应用程序.我开始使用Autofac来解决这个问题. Autofac工作.但是,随机我会收到错误: 尝试创建“SomeController”类型的控制器时发生错误.确保控制器具有无参数的公共构造函数. 当我清理解决方案并重建时.没有更多的错误.我以为这是我的Vi
我有一个MVC / WebApi应用程序.我开始使用Autofac来解决这个问题.

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在应用程序入口点(Global.asax,Application_Start).所以ASP.NET无法在我的控制器中解析我的依赖项,然后我得到了同样的异常.

在应用程序启动的第一时间设置依赖项解析器,解决了我的问题.

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读