Я вижу следующее прерывистое исключение локально при попытке разрешить службу в приложении-функции Azure .net core 2.1. Кажется, что это происходит только тогда, когда функция обрабатывает несколько сообщений одновременно, и некоторые сообщения не выполняются.
'System.Private.CoreLib: исключение при выполнении функции: FunctionOne. Microsoft.Extensions.DependencyInjection: невозможно разрешить службу для типа «Microsoft.Extensions.Configuration.IConfiguration» при попытке активировать «XXX.Service2».
Когда служба находится в том же проекте, что и функция, все работает нормально. Это происходит только тогда, когда я перемещаю его в другой проект. Другой проект, который я создал, - это простой проект стандарта .net 2.0, в котором есть только этот сервис и ссылка на nuget Microsoft.Extensions.Configuration.
Я знаю, что эта реализация использует локатор служб, который является анти-шаблоном, но я все еще хочу понять, почему возникает это исключение.
[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
{
}