【问题标题】:Unable to inject ILogger into classes using Autofac无法使用 Autofac 将 ILogger 注入到类中
【发布时间】:2016-12-18 17:29:13
【问题描述】:

我已经在 autofac 配置中设置了记录器,但是记录器没有被注入到控制器或其他类中。

builder.RegisterType<SerilogLogger>()
                .WithParameters(new List<Parameter>
                {
                    new NamedParameter("connectionString", azureConnectionString),
                    new NamedParameter("azureTableName", azureTableName),
                })
                .As<ILogger>().SingleInstance();

HomeController.cs

public class HomeController : Controller
{
    private ILogger logger;

    public HomeController(ILogger logger)
    {
        this.logger = logger;
    }

    public ActionResult Index()
    {
        ViewBag.Title = "Home Page";

        return View();
    }
}

我需要显式访问记录器。有任何想法吗?

异常详情

No parameterless constructor defined for this object.

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.MissingMethodException: No parameterless constructor defined for this object.

异常是直截了当的,我的 autofac 配置似乎有问题。

【问题讨论】:

  • 你有异常吗?如果是这样,请将完整的异常详细信息添加到您的问题中。
  • 您在 Autofac 中注册的 ILogger 接口与您在构造函数中的接口完全相同吗?那里有很多 ILogger 接口。
  • ILogger 是我在 Nlog 和 Serilog 上编写到外观的接口。
  • @TravisIllig 即使ILoggers 是不同的,如果连接正确,Autofac 也会抛出不同的消息,对吧?
  • 不。如果您注册了错误类型的记录器,那么所有 Autofac 都知道它不能满足参数,因此您将收到“无无参数构造函数”错误。它匹配类型,而不是名称。

标签: c# asp.net-web-api2 autofac


【解决方案1】:

您用asp.net-web-api2 标记您的问题听起来很奇怪,但您的代码示例似乎使用了 ASP.NET MVC。

我可以看到这里发生了两件事:

  • 您的容器中没有register the controllers
  • 和/或您没有set the DependencyResolver 使用您的 Autofac 容器,这意味着默认控制器激活器负责更新您的控制器,并且它只能对具有默认无参数构造函数的控制器执行此操作

【讨论】:

  • 是的,我只是在使用 HomeController 进行测试。 ILogger 也没有被注入任何其他类。我设置了依赖解析器...所有其他依赖项都按预期注入。
  • 你的评论让我有点困惑。您只是在使用 ASP.NET MVC HomeController 进行测试,但除此之外,您使用的是 ASP.NET Web API 吗?如果是这样,您是否设置了ASP.NET Web API-specific DependencyResolver
  • 似乎在任何地方都可以工作,除了以前没有的 HomeController。我实际上并不需要 HomeController...感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 2022-01-18
  • 2023-03-05
  • 2011-11-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-22
  • 2020-03-08
相关资源
最近更新 更多