为什么我的 serviceColletion 不是 instantiated/null?
Why is my serviceColletion not instantiated/null?
在 TFM net 5.0 中,我有一个控制台应用程序,其设置如下代码:
- 我不明白为什么我得到异常“System.ArgumentNullException:'值不能为空。(参数 'services')'”当 运行 应用程序时。
- 为什么异常指的是“服务”?
- 为什么我不能将 AddOtions(): 添加到 serviceCollection?
namespace funkyNamespace
{
public class Program
{
public static IConfigurationRoot configuration;
private static IServiceCollection serviceCollection;
public static void Main()
{
ConfigureServices(serviceCollection);
MainAsync(log).GetAwaiter().GetResult();
}
private static async Task MainAsync()
{
//....business logic is here
}
static void ConfigureServices(IServiceCollection serviceColletion)
{
serviceColletion.AddOptions();
var serviceBuilder = serviceColletion.BuildServiceProvider();
configuration = new ConfigurationBuilder()
.SetBasePath(Directory.GetParent(AppContext.BaseDirectory).FullName)
.AddJsonFile("local.settings.json", false)
.Build();
var section = configuration.GetSection("Values");
serviceColletion.AddMemoryCache();
....
....
}
}
}
您需要先实例化服务集合。例如在字段初始值设定项中:
private static IServiceCollection serviceCollection = new ServiceCollection();
您的代码还存在一些其他问题:
- 可能您想将
serviceColletion.BuildServiceProvider();
的结果存储在一个字段中(或者甚至可能是“根”服务,甚至不存储任何东西 - 只需使用构建“根”服务),而不是集合本身 (请注意,强烈建议不要多次调用 BuildServiceProvider
)
- 您在构建提供程序后将服务添加到集合中 - 因此它们将不会出现在构建版本中。
在 TFM net 5.0 中,我有一个控制台应用程序,其设置如下代码:
- 我不明白为什么我得到异常“System.ArgumentNullException:'值不能为空。(参数 'services')'”当 运行 应用程序时。
- 为什么异常指的是“服务”?
- 为什么我不能将 AddOtions(): 添加到 serviceCollection?
namespace funkyNamespace
{
public class Program
{
public static IConfigurationRoot configuration;
private static IServiceCollection serviceCollection;
public static void Main()
{
ConfigureServices(serviceCollection);
MainAsync(log).GetAwaiter().GetResult();
}
private static async Task MainAsync()
{
//....business logic is here
}
static void ConfigureServices(IServiceCollection serviceColletion)
{
serviceColletion.AddOptions();
var serviceBuilder = serviceColletion.BuildServiceProvider();
configuration = new ConfigurationBuilder()
.SetBasePath(Directory.GetParent(AppContext.BaseDirectory).FullName)
.AddJsonFile("local.settings.json", false)
.Build();
var section = configuration.GetSection("Values");
serviceColletion.AddMemoryCache();
....
....
}
}
}
您需要先实例化服务集合。例如在字段初始值设定项中:
private static IServiceCollection serviceCollection = new ServiceCollection();
您的代码还存在一些其他问题:
- 可能您想将
serviceColletion.BuildServiceProvider();
的结果存储在一个字段中(或者甚至可能是“根”服务,甚至不存储任何东西 - 只需使用构建“根”服务),而不是集合本身 (请注意,强烈建议不要多次调用BuildServiceProvider
) - 您在构建提供程序后将服务添加到集合中 - 因此它们将不会出现在构建版本中。