【发布时间】:2019-04-25 20:43:20
【问题描述】:
尝试在 .net core 2.1 azure 函数应用程序中解析服务时,我在本地看到以下间歇性异常。它似乎仅在函数同时处理多个消息并且仅使某些消息失败时才会发生。
'System.Private.CoreLib:执行函数时出现异常:FunctionOne。 Microsoft.Extensions.DependencyInjection:尝试激活“XXX.Service2”时,无法解析“Microsoft.Extensions.Configuration.IConfiguration”类型的服务。
当服务与函数在同一个项目中时,一切正常。只有当我将它移到另一个项目时才会发生这种情况。我创建的另一个项目只是一个简单的 .net 标准 2.0 项目,其中仅包含此服务和对 Microsoft.Extensions.Configuration nuget 的引用。
我知道这个实现使用了一个反模式的服务定位器,但我仍然想了解为什么会发生这个异常。
[FunctionName("FunctionOne")]
public static void Run(
[QueueTrigger(_queue, Connection = _storageConnection)]
string queueItem,
ILogger trace)
{
// Startup
var services = Startup.GetServices();
// Services
var service = services.GetService<IService2>();
}
public static class Startup
{
public static Func<IServiceProvider> GetServices = CreateServices;
public static IConfiguration GetConfiguration()
{
return new ConfigurationBuilder()
.AddEnvironmentVariables()
.Build();
}
private static IServiceProvider CreateServices()
{
var services = new ServiceCollection();
var config = GetConfiguration();
services
.AddSingleton(config)
.AddSingleton<IService2, Service2>();
return services.BuildServiceProvider();
}
}
public class Service2 : IService2
{
public Service2(IConfiguration configuration)
{
}
}
public interface IService2
{
}
【问题讨论】:
标签: c# azure dependency-injection azure-functions