我正在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

请建议我做错了什么,或者我如何解决这个问题..请

推荐答案

根据注释,try 查找或添加以下代码

using Microsoft.Extensions.Configuration;

 Some class {

    ...
        var builder = new ConfigurationBuilder()
        .SetBasePath(Directory.GetCurrentDirectory())
        .AddJsonFile("local.settings.json", optional: false)
        .Build();

        //just to verify
        var conn = builder.GetSection("ServiceBusConnectionString").Get<string>();
        Console.WriteLine(conn);
     ...
}

您可以将其添加到当前的"Configure"方法中,并保持代码的其余部分不变.

更新您的.csproj文件与以下示例匹配,以确保文件被复制.

发件人:https://docs.microsoft.com/en-us/azure/azure-functions/functions-dotnet-dependency-injection

 Some class {

    ...
        var builder = new ConfigurationBuilder()
        .SetBasePath(Directory.GetCurrentDirectory())
        .AddJsonFile("local.settings.json", optional: false)
        .AddEnvironmentVariables() //HERE!!

        //just to verify
        var conn = Environment.GetEnvironmentVariable("ServiceBusConnectionString");
        Console.WriteLine(conn);
     ...
}

Csharp相关问答推荐

C# uwp中的Win11启动屏幕剪辑工作方式不同

错误401未授权ASP.NET Core.使用JWT创建身份验证/授权

有没有一种方法可以防止在编译时在MicrosoftC或非单线程上下文中调用方法?

使用客户端密钥为Fabric Rest API生成令牌

在多对多关系上不删除实体

为什么总输出就像12.3没有一分一样?

如何模拟耐久任务客户端在统一测试和获取错误在调度NewsListationInstanceAsync模拟设置

.NET SDK包中的官方C#编译器在哪里?

try 在.Net核心身份注册页面中使用AJAX,但没有成功..NET Core 5.0 Razor页面应用程序

Blazor Web App WASM的两个独立项目令人困惑

net中从位图获取坐标和绘制折线

我什么时候应该在Dapper中使用Connection.OpenAsync?

将FileStream的特定部分作为字节数组读取

错误:此版本的Visual Studio无法打开以下项目

C#Microsoft.CodeAnalysis.CSharp.Scriiting不等待并行.对于

将字符串类型日期输入(yyyy-mm-ddthh:mm:ss)转换为MM/dd/yyyy格式

数据库操作预计影响1行,但实际影响0行; after _dbContext.SaveChanges();

如何为控制器PUT操作绑定对象数组

使用ITfoxtec.Identity.Saml2解析相同键多值SAML 2声明

为什么我的UserControl没有加载到我的主窗口中?