【问题标题】: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 隔离进程中使用 Azure Functions v3 时添加以前在 Startup.cs 中的代码->配置方法
【发布时间】:2021-10-04 11:42:19
【问题描述】:

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

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

但我不知道在没有 Startup.cs 文件的 .NET 5 隔离进程函数中的新方法中在哪里添加此行。

谁能提供一个示例,说明我通常会在 Startup.cs 中添加的内容 --> Configure 方法吗?

有没有一些类似菊花链的扩展方法...

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

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

【问题讨论】:

    标签: c# .net-core azure-functions .net-5


    【解决方案1】:

    选项 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<LicenseRegistrationService >();
        
                // Bind your configuration parameters  
                services.AddOptions<LicenseConfiguration>()
                        .Configure<IConfiguration>((settings, configuration) => 
                        { 
       configuration.GetSection(nameof(LicenseConfiguration)).Bind(settings); 
                        });
            });
        }
    

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-22
      • 2021-08-04
      • 2023-03-10
      • 1970-01-01
      • 2022-10-17
      • 2021-09-03
      • 2022-01-22
      • 1970-01-01
      相关资源
      最近更新 更多