为什么我的 serviceColletion 不是 instantiated/null?

Why is my serviceColletion not instantiated/null?

在 TFM net 5.0 中,我有一个控制台应用程序,其设置如下代码:

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
  • 您在构建提供程序后将服务添加到集合中 - 因此它们将不会出现在构建版本中。