Спасибо за совет @ HariHaran.
Я пытался использовать Autofac и смог заставить его работать с моим проектом ASP .NET Core 3.0 Web API. Сканирование сборки, предоставленное Autofac, не работало, поэтому мне пришлось прибегнуть к сканированию вызывающей сборки для поиска моих собственных библиотек DLL. Я не смог добавить пакет NuGet, который вы упомянули в комментарии (AzureFunctions.Autofac), потому что между ним и Autofac.Extensions.DependencyInjection возник конфликт версий.
С новым сканированием сборки, которое мне удалось выполнить дляописанный выше процесс Autofac, затем я предпринял еще одну попытку со встроенным контейнером .NET Core и Scrutor. Это вспомогательный метод, который мне удалось создать - он работает как с проектом веб-API, так и с функцией Azure: -
Класс запуска для функции Azure
using Microsoft.Azure.Functions.Extensions.DependencyInjection;
using Microsoft.Extensions.DependencyInjection;
[assembly: FunctionsStartup(typeof(MyNamespace.Gateway.Queue.Function.Startup))]
namespace MyNamespace.Gateway.Queue.Function
{
public class Startup : FunctionsStartup
{
public override void Configure(IFunctionsHostBuilder builder)
{
builder.Services.AddSolutionServices();
}
}
}
DI Helper, используемый веб-API и функцией Azure
using Scrutor;
using System.Collections.Generic;
using System.IO;
using System.Reflection;
namespace Microsoft.Extensions.DependencyInjection
{
public static class DotNetCoreBootstrapper
{
public static void AddSolutionServices(this IServiceCollection services)
{
string path = Path.GetDirectoryName(Assembly.GetCallingAssembly().Location);
List<Assembly> assemblies = new List<Assembly>();
foreach (string dll in Directory.GetFiles(path, "MyNamespace*.dll"))
{
assemblies.Add(Assembly.LoadFrom(dll));
}
services.Scan(scan => scan
.FromAssemblies(assemblies)
.AddClasses(classes => classes.Where(types =>
types.FullName.StartsWith("MyNamespace.")))
.UsingRegistrationStrategy(RegistrationStrategy.Append)
.AsMatchingInterface()
.WithTransientLifetime()
);
}
}
}