当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的任何外观都可以正常工作。
答案 0 :(得分:1)
我将您的配置复制粘贴到控制台应用程序,但一切正常。可能是CommunicationApiFacade
引用的ILogger
抽象与您的组合根所引用的{{1}}不同吗?混合Common.Logging和log4net时通常会发生这些事情。