我已经使用.net CORE创建了一个空的AWS Lambda项目:
基本上它产生的只是一个.net核心空lambda函数项目:
但是现在-它不支持Injection(DI),因为没有startup
文件等...因此,基本上,它是.net核心项目,没有所有好处。
However , Tony wrote about it:
Add .NET Core DI and Config Goodness to AWS Lambda Functions
":
基本上,他所做的是手动进行项目支持DI。
所以我创建了一个ConfigurationService
类:
ConfigureServices.cs
public interface IConfigurationService
{
IConfiguration GetConfiguration();
}
public class ConfigurationService : IConfigurationService
{
public IConfiguration GetConfiguration()
{
return new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
.AddEnvironmentVariables()
.Build();
}
}
然后按照常规方式在代码中使用它。
因此,这是与上述功能相同的函数,它从appSettigs返回键,加上(!!!)依赖注入:
Function.cs
public class Function
{
public Function()
{
/*MANUALLY MAKING OUR PROJECT TO SUPPORT DI*/
var serviceCollection = new ServiceCollection();
ConfigureServices(serviceCollection);
var serviceProvider = serviceCollection.BuildServiceProvider();
ConfigService = serviceProvider.GetService<IConfigurationService>();
}
public IConfigurationService ConfigService { get; }
private void ConfigureServices(IServiceCollection serviceCollection)
{
serviceCollection.AddOptions();
serviceCollection.AddTransient<IConfigurationService, ConfigurationService>();
}
public string FunctionHandler(string input, ILambdaContext context)
{
var res = ConfigService.GetConfiguration()["Message"];
return res;
}
}
它确实有效:
(这是appsetting.json文件BTW):
appsettings.json
{
"Message": "Hello"
}
当我将IConfigurationService
注入到其他类的构造函数中时,它也起作用。
那么问题出在哪里呢?
我想使用IOptions
使用对appsettings.json的类型安全访问。
—因此,我创建了一个相应的文件:
AppSettings.cs
public class AppSettings
{
public string Message { get; set; }
}
现在我需要configure
,但是看看会发生什么:
它首先在第16行中调用ConfigureServices
方法,然后在第27行中Configure
AppSettings
,然后由于{{ 1}}是ConfigService
。
为什么它为null?因为它仅在第18行
问题
我应该怎么做才能使代码支持null
?
答案 0 :(得分:3)
在这种情况下,您实际上并不需要QuestionId
,并且可以根据需要配置依赖项
例如查看以下内容
IOptions
静态服务提供商的一次性设置已配置为所需的设置,该设置是作为强类型模型添加到提供商的,可以根据需要进行解析和注入。