Autofac - 确保控制器具有无参数的公共构造函数

dev*_*r82 14 c# asp.net autofac autofac-configuration

我知道它之前已经被问过并回答了 - 我问的原因是因为(我认为)我尝试了所有建议的解决方案来解决这个问题,但仍然无法解决它.

我有一个ASP.NET Web API 2.0项目.我有Autofac,Autofac.Mvc5Autofac.WebApi2安装了依赖项.当我尝试调用API控制器时,我收到以下错误:

尝试创建"MyController"类型的控制器时发生错误.确保控制器具有无参数的公共构造函数.

在我Global.asax的电话中IocConfig.Config(),我已将其置于其中App_Start:

public static class IocConfig
{
    public static void Config()
    {
        var builder = new ContainerBuilder();

        builder.RegisterType<MyLogger>().As<IMyLogger>();

        builder.RegisterApiControllers(Assembly.GetCallingAssembly());
        builder.RegisterWebApiFilterProvider(GlobalConfiguration.Configuration);

        WebApiApplication.Container = builder.Build();

        DependencyResolver.SetResolver(
            new AutofacDependencyResolver(WebApiApplication.Container));
        GlobalConfiguration.Configuration.DependencyResolver =
             new AutofacWebApiDependencyResolver(WebApiApplication.Container);
    }
}
Run Code Online (Sandbox Code Playgroud)

这是以下构造函数MyController:

public MyController(IMyLogger logger)
Run Code Online (Sandbox Code Playgroud)

当我尝试调用它时,我得到有关构造函数的指定错误.我错过了什么?

Sco*_*ttB 19

我也遇到了这个错误,根本原因是在Autofac中没有正确注册Controller的一个依赖项.

InnerException有详细信息(在我的例子中是一个Autofac.Core.DependencyResolutionException),ExceptionMessage包含了这个依赖项的细节.沿着:

"激活特定注册期间发生错误...无法解析参数'XXXX'

  • 这就解决了!内部异常正在解决真正的问题,即缺少注册。 (2认同)

neu*_*t47 12

检查这个答案.
它帮助我ContainerBuilder()为WebApi控制器配置正确.

如果您在此处查找此类错误的解决方案,则应首先检查DependencyResolver配置.

我遇到了同样的问题,问题是我使用Autofac代码示例ContainerBuilder()作为MVC控制器的对象,而不是API.

我的代码用于注册两种类型的控制器(MVC和Api):

var builder = new ContainerBuilder();
builder.RegisterControllers(Assembly.GetExecutingAssembly()); //Register MVC Controllers
builder.RegisterApiControllers(Assembly.GetExecutingAssembly()); //Register WebApi Controllers
builder.RegisterType<Type>().As<IType>();

var container = builder.Build();

DependencyResolver.SetResolver(new AutofacDependencyResolver(container)); //Set the MVC DependencyResolver
GlobalConfiguration.Configuration.DependencyResolver = new AutofacWebApiDependencyResolver((IContainer)container); //Set the WebApi DependencyResolver
Run Code Online (Sandbox Code Playgroud)

  • @ neustart47最后一行解决了我的问题,感谢您的输入。 (2认同)

err*_*ler 0

我认为您缺少在应用程序启动代码中注册 autofac 。

用这个:

protected void Application_Start()
{
    IocConfig.Config();
    AreaRegistration.RegisterAllAreas();
    FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
    RouteConfig.RegisterRoutes(RouteTable.Routes);
   BundleConfig.RegisterBundles(BundleTable.Bundles);
}
Run Code Online (Sandbox Code Playgroud)

有关更多详细信息,请参阅此博客http://www.codeproject.com/Articles/808894/IoC-in-ASP-NET-MVC-using-Autofac