繁体   English   中英

在 .NET 5 隔离进程中使用 Azure Functions v3 时,如何添加以前在 Startup.cs 中的代码 --> 配置方法

[英]How do I add code that was previously in Startup.cs -->Configure method when using Azure Functions v3 in .NET 5 isolated process

我正在使用 .NET 5 dotnet-isolated 使用新的 C# 函数应用程序,其中示例仅显示 Program.cs 并且没有 Startup.cs 类。 我有一个问题,我需要注册 SyncFusion 许可证,我通常在 Startup.cs -->Configure Method 中使用这一行进行注册;

Syncfusion.Licensing.SyncfusionLicenseProvider.RegisterLicense("...");

但是我不知道在没有 Startup.cs 文件的 .NET 5 隔离进程函数中的新方法中添加这一行的位置。

任何人都可以提供一个示例,说明我通常会在 Startup.cs --> Configure 方法中添加的内容吗?

是否有一些扩展方法可以菊花链类似于...

.ConfigureServices(services =>
{
     ...
     ...
     ...
 }

...在 program.cs 文件的 .NET 5 独立进程版本中与 HostBuilder 一起使用?

选项1

我将遵循现有模式并在适当的项目中为IServiceCollection创建一个扩展方法,如下所示:

public static class ServiceCollectionExtensions
{
    public static void AddLicense(this IServiceCollection services)
    {
        Syncfusion.Licensing.SyncfusionLicenseProvider.RegisterLicense("...");
    }
}

然后,在您的 Function 项目的program.cs文件中,您可以这样调用它:

static Task Main(string args[])
{
    var hostBuilder = new HostBuilder()
          ...
          .ConfigureServices(services => 
          {
              services.AddLicense();
          });
}

选项 2

现在,您可能需要更多信息来注册实际许可证。 假设它是一个序列号; 对其进行硬编码可能不是一个好主意。 相反,我们将其置于配置中(甚至可以链接到密钥保管库以提高安全性)。

首先,让我们定义我们的配置类:

public class LicenseConfiguration
{
    // I chose a serial number by it could be something else.
    public string SerialNumber { get; set;}
}

现在,您可以定义一个IHostedService ,它会在您的函数每次启动时运行:

 public class LicenseRegistrationService : IHostedService
    {
        private readonly LicenseConfiguration _licenseConfiguration;

        public LicenseRegistrationService(IOptions<LicenseConfiguration> licenseConfiguration) 
        {
            _licenseConfiguration = licenseConfiguration.Value;
        }
    
        public Task StartAsync(CancellationToken cancellationToken)
        { 
 Syncfusion.Licensing.SyncfusionLicenseProvider.RegisterLicense(_licenseConfiguration.SerialNumber);
              return Task.CompletedTask;
        }
    
        public Task StopAsync(CancellationToken cancellationToken)
        { 
              return Task.CompletedTask;
        }
    }

现在让我们在Program类中连接所有东西:

static Task Main(string args[])
    {
        var hostBuilder = new HostBuilder()
              ...
              .ConfigureServices(services => 
              {
                  // Register you hosted service 

services.AddHostedService(); // 绑定你的配置参数
services.AddOptions().Configure((settings, configuration) => { configuration.GetSection(nameof(LicenseConfiguration)).Bind(settings); }); }); }

在您的local.settings.json文件中,您可以放置​​适当的配置以在本地验证所有内容:

{
    "IsEncrypted": false,
    "Values": {
        ...
        "LicenseConfiguration__SerialNumber": "this-is-your-serial-number"
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM