在 .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 class。我有一个问题,我需要注册一个 SyncFusion 许可证,我通常在 Startup.cs -->Configure Method by using this line;
中这样做
Syncfusion.Licensing.SyncfusionLicenseProvider.RegisterLicense("...");
但我不知道在没有 Startup.cs 文件的 .NET 5 隔离进程函数中的新方法中将此行添加到何处。
任何人都可以提供一个示例,说明我通常会在 Startup.cs --> 配置方法中添加哪些内容?
是否有一些扩展方法可以菊花链类似于...
.ConfigureServices(services =>
{
...
...
...
}
...在 program.cs 文件的 .NET 5 隔离进程版本中与 HostBuilder 一起使用?
选项 1
我会遵循现有的模式并在适当的项目中为 IServiceCollection
创建一个扩展方法,如下所示:
public static class ServiceCollectionExtensions
{
public static void AddLicense(this IServiceCollection services)
{
Syncfusion.Licensing.SyncfusionLicenseProvider.RegisterLicense("...");
}
}
然后,在你的函数项目的program.cs
文件中,你可以这样调用它:
static Task Main(string args[])
{
var hostBuilder = new HostBuilder()
...
.ConfigureServices(services =>
{
services.AddLicense();
});
}
选项 2
现在,您可能需要更多信息才能注册实际许可证。假设它是一个序列号;对其进行硬编码可能不是一个好主意。相反,我们将它放在一个配置中(甚至可以链接到密钥库以提高安全性)。
首先,让我们定义我们的配置class:
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
class:
中连接所有内容
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"
}
}
我正在使用 .NET 5 dotnet-isolated 使用新的 C# 函数应用程序,其中示例仅显示 Program.cs 而没有 Startup.cs class。我有一个问题,我需要注册一个 SyncFusion 许可证,我通常在 Startup.cs -->Configure Method by using this line;
中这样做Syncfusion.Licensing.SyncfusionLicenseProvider.RegisterLicense("...");
但我不知道在没有 Startup.cs 文件的 .NET 5 隔离进程函数中的新方法中将此行添加到何处。
任何人都可以提供一个示例,说明我通常会在 Startup.cs --> 配置方法中添加哪些内容?
是否有一些扩展方法可以菊花链类似于...
.ConfigureServices(services =>
{
...
...
...
}
...在 program.cs 文件的 .NET 5 隔离进程版本中与 HostBuilder 一起使用?
选项 1
我会遵循现有的模式并在适当的项目中为 IServiceCollection
创建一个扩展方法,如下所示:
public static class ServiceCollectionExtensions
{
public static void AddLicense(this IServiceCollection services)
{
Syncfusion.Licensing.SyncfusionLicenseProvider.RegisterLicense("...");
}
}
然后,在你的函数项目的program.cs
文件中,你可以这样调用它:
static Task Main(string args[])
{
var hostBuilder = new HostBuilder()
...
.ConfigureServices(services =>
{
services.AddLicense();
});
}
选项 2
现在,您可能需要更多信息才能注册实际许可证。假设它是一个序列号;对其进行硬编码可能不是一个好主意。相反,我们将它放在一个配置中(甚至可以链接到密钥库以提高安全性)。
首先,让我们定义我们的配置class:
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
class:
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"
}
}