我正在try 将azure函数中的本地配置传递给另一个项目中的iServiceCollection,该函数与该项目有依赖关系.
我正在工作.净额6
这是我的函数启动.cs基于此question的答案
[assembly: FunctionsStartup(typeof(DatabaseInit.Startup))]
namespace Edos.DatabaseInit;
public class Startup:FunctionsStartup
{
public override void Configure(IFunctionsHostBuilder builder)
{
var configuration = builder.GetContext().Configuration;
builder.Services.AddInfrastructure(configuration);
}
}
这是我的地方.设置.json
{
"IsEncrypted": false,
"ServiceBusConnectionString": "myconnectionstring",
"Values": {
"AzureWebJobsStorage": "UseDevelopmentStorage=true",
"FUNCTIONS_WORKER_RUNTIME": "dotnet"
}
}
我的职能
public class CosmosInit
{
private readonly IMessagingService _messagingService;
public CosmosInit(IMessagingService messagingService)
{
_messagingService = messagingService;
}
[FunctionName("CosmosInit")]
public async Task<IActionResult> Run(
[HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequest req,
ILogger log)
{
await _messagingService.PushToTopic("demotopic", "message");
return new OkObjectResult(responseMessage);
}
}
以下是Azure函数的依赖项项目中的上述AddInfrastructure方法
public static class DependencyInjection
{
public static IServiceCollection AddInfrastructure(this IServiceCollection services, IConfiguration configuration)
{
var serviceBusConnectionString = Environment.GetEnvironmentVariable("ServiceBusConnectionString");
if (string.IsNullOrEmpty(serviceBusConnectionString))
{
throw new InvalidOperationException(
"Please specify a valid ServiceBusConnectionString in the Azure Functions Settings or your local.settings.json file.");
}
//using AMQP as transport
services.AddSingleton((s) => {
return new ServiceBusClient(serviceBusConnectionString, new ServiceBusClientOptions() { TransportType = ServiceBusTransportType.AmqpWebSockets });
});
services.AddScoped<IMessagingService, MessagingService>();
return services;
}
}
这就是我的方法(在基础设施项目中)
public class MessagingService: IMessagingService
{
private readonly ServiceBusClient _serviceBusClient;
public MessagingService(ServiceBusClient serviceBusClient)
{
_serviceBusClient = serviceBusClient;
}
// the sender used to publish messages to the topic
public async Task<int> PushToTopic(string topic, string serviceMessage)
{
var sender = _serviceBusClient.CreateSender(topic);
var message = new ServiceBusMessage(serviceMessage);
await sender.SendMessageAsync(message);
return 1;
}
}
但执行时没有错误.但在基础设施项目环境中.GetEnvironmentVariable("ServiceBusConnectionString")仅显示为null.我没有发现它从本地函数获取的配置.设置.json
请建议我做错了什么,或者我如何解决这个问题..请