【发布时间】:2018-08-28 07:06:33
【问题描述】:
我正在编写一个简单的 Azure 函数。
我已经安装了AzureFunctions.Autofac nuget 包,并希望将其用作我的DI 库。
我设置了以下AutofacConfig 类来注册我的类型:
public class AutofacConfig
{
public AutofacConfig(string functionName)
{
DependencyInjection.Initialize(builder =>
{
//do all of you initialization here
//db client
builder.RegisterType<EventComponent>()
.As<IComponent<EventModel>>().SingleInstance();
}, functionName);
}
}
这是我的EventComponent 类,我想向其中注入提供的ILogger 实例。
public class EventComponent : IComponent<EventModel>
{
private ILogger _log;
public EventComponent(ILogger logger)
{
_log = logger;
}
}
这是我注入 EventComponent 的方式:
[FunctionName("AddEvent")]
public static async Task<HttpResponseMessage> Run([HttpTrigger(AuthorizationLevel.Function, "post", Route = null)]HttpRequestMessage req, ILogger log, [Inject]IComponent<EventModel> component)
{
log.LogInformation("C# HTTP trigger function processed a request.");
await component.Add(new EventModel() { Id = Guid.NewGuid(), Description = $"Test description nr: {new Random().Next(1, 100000)}", User = "Test User" });
return req.CreateResponse(HttpStatusCode.OK);
}
问题是,我在上面遇到了一个异常,因为Autofac 无法解析参数 Microsoft.Extensions.Logging.ILogger。
这是异常消息:
异常绑定参数“组件”...无法解析构造函数“Void .ctor(Microsoft.Extensions.Logging.ILogger)”的参数“Microsoft.Extensions.Logging.ILogger logger”。 (有关详细信息,请参阅内部异常。)-> 无法使用可用的服务和参数调用类型为 'Event.Function.Components.EventComponent' 的具有 'Autofac.Core.Activators.Reflection.DefaultConstructorFinder' 的构造函数:\r \n无法解析构造函数'Void .ctor(Microsoft.Extensions.Logging.ILogger)'的参数'Microsoft.Extensions.Logging.ILogger logger'。",
如何将ILogger 实例注入我的EventComponent 类?
【问题讨论】:
-
您是否尝试过使用
builder.RegisterType<Logger>().As<ILogger>().SingleInstance();?显然,您需要注册一个记录器,并且应该使用 autofac 构建器并在注册EventComponent类之前进行。 -
@JohnEphraimTugado Logger 代表什么?我没有 Logger 类,如果我想使用 Intellisense 提供的默认 Logger 类,我需要将 Type 传递给通用 Logger 类
-
您需要传递
ILogger的实现,它可以是您自己的实现。您也可以查看this的答案作为参考。 -
当您不熟悉
ILogger本身时,为什么还要在EventComponent类中使用ILogger?不能删除引用吗? -
@JohnEphraimTugado .NET SDK 为 ILogger 提供了一个默认实现,它记录到 Application Insights,我想在我的组件类中使用默认日志记录。
标签: c# autofac azure-functions autofac-configuration