netcore容器与配置文件操作

using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Configuration.Json;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Options;
using System;

namespace CoreConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            //DI容器测试
            var provider1 = new ServiceCollection()
                .AddOptions()
                .AddTransient<IPerson, Person>()
                .AddTransient<IDog, Dog>()
                .AddTransient<IFly, Fly>()
                .BuildServiceProvider();

            var dog1 = provider1.GetService<IDog>();
            Console.WriteLine(provider1.GetService<IDog>().Name);
            Console.WriteLine(provider1.GetHashCode());

            var provider2 = new ServiceCollection()
                .AddOptions()
                .AddTransient<IPerson, Person>()
                .AddTransient<IDog, Dog>()
                .BuildServiceProvider();
            var dog2 = provider2.GetService<IDog>();
            Console.WriteLine(provider2.GetHashCode());
            
            //配置文件读取测试
            IConfiguration config = new ConfigurationBuilder()
                .SetBasePath(AppContext.BaseDirectory)
                .Add(new JsonConfigurationSource
                {
                    Path = "appsettings.json",
                    Optional = false,
                    ReloadOnChange = true
                }).Build();
            ConfigHelper.config = config;

            var user = ConfigHelper.GetConfig<Usernfo>("User");
            string url = ConfigHelper.GetValue("Url");
            Console.WriteLine($"网址:{url}");
            Console.WriteLine($"用户名:{user.Name},电话:{string.Join("|",user.Phones)}");
            Console.ReadKey();
        }
    }
}
using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Configuration.Json;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Options;

namespace CoreConsoleApp1
{
    public class ConfigHelper
    {
        public static IConfiguration config;

        public static string GetValue(string key)
        {
            return config.GetSection(key).Value;
        }

        public static T GetConfig<T>(string key) where T : class, new()
        {
            var data = new ServiceCollection()
                .AddOptions()
                .Configure<T>(config.GetSection(key))
                .BuildServiceProvider()
                .GetService<IOptions<T>>()
                .Value;
            return data;
        }
    }
}
using System;
using System.Collections.Generic;
using System.Text;

namespace CoreConsoleApp1
{
    public interface IPerson
    {
        string Name { get; set; }
    }

    public class Person : IPerson
    {
        public string Name { get; set; }
    }


    public interface IDog
    {
        string Name { get; set; }
    }

    public class Dog : IDog
    {
        private IFly _fly;

        public Dog()
        { }

        public Dog(IFly fly)
        {
            _fly = fly;
        }

        public Dog(string name)
        {
            this.Name = name;
        }
        public string Name { get; set; } = "huahua";
    }


    public interface IFly
    {
        string Fiy();
    }

    public class Fly : IFly
    {
        public string Fiy()
        {
            return "fly....";
        }
    }
}
using System;
using System.Collections.Generic;
using System.Text;

namespace CoreConsoleApp1
{
    public class Usernfo
    {
        public string Name { get; set; }
        public string[] Phones { get; set; }
    }
}
appsettings.json

{
  "Url": "http://www.test.com",
  "User": {
    "Name": "zhangsan",
    "Phones": [ "138002233", "12866525", "185226365" ]
  }
}

 

原文地址:https://www.cnblogs.com/huangzelin/p/10856528.html