Simple Injector容器无法解析依赖关系

时间:2017-03-01 19:12:42

标签: c# dependency-injection simple-injector

Verify()我的容器出现以下错误时:

  

类型'System.InvalidOperationException'的未处理异常   发生在SimpleInjector.dll

中      

其他信息:配置无效。创造   类型ICommunicationApiFacade的实例失败。的构造函数   类型CommunicationApiFacade包含带名称的参数   'getLogger'并输入未注册的Func<Object, ILogger>。   请确保已注册Func<Object, ILogger>,或更改   CommunicationApiFacade的构造函数。

这是我的 IocConfig

container.RegisterSingleton<Func<object, ILogger>>(
    x => LogManager.GetLogger(x.GetType().FullName));

container.RegisterSingleton<Func<string, ICommunicationClient>>(
    tenant => new CommunicationClient(
        new Uri(configuration.AppSettings["communication_api." + tenant]),
        new TenantClientConfiguration(tenant)));

container.RegisterSingleton<ICommunicationApiFacade, CommunicationApiFacade>();

这是我的 CommunicationApiFacade

internal class CommunicationApiFacade : ICommunicationApiFacade
{
    private readonly ILogger _logger;
    private readonly Func<string, ICommunicationClient> _communicationFactory;

    public CommunicationApiFacade(Func<object, ILogger> getLogger,
        Func<string, ICommunicationClient> communicationFactory)
    {
        _logger = getLogger(this);
        _communicationFactory = communicationFactory;
    }
    ...
}

有趣的是,这个记录器正在其他地方使用。通过从CommunicationApiFacade中删除ILogger的任何外观都可以正常工作。

1 个答案:

答案 0 :(得分:1)

我将您的配置复制粘贴到控制台应用程序,但一切正常。可能是CommunicationApiFacade引用的ILogger抽象与您的组合根所引用的{{1}}不同吗?混合Common.Logging和log4net时通常会发生这些事情。