第二十六节:扩展如何在控制台中使用HttpClientFactory、读取配置文件、数据保护、注入类、EFCore的使用

整体说明:这里主要是借助依赖注入程序,在控制台上获取需要的相关类,然后进行使用对应方法的调用

(1).首先需要添加依赖注入的程序集【Microsoft.Extensions.DependencyInjection】

(2).添加所需组件对应的程序集,并进行Addxxxx

(3).创建Provicder

(4).利用Provider调用GetService获取对应对象

PS:除了读取配置文件的创建例外,其他都大致遵循上述规律。

1. HttpClientFactory

  添加程序集:【Microsoft.Extensions.Http】

 1           {
 2                 var serviceCollection = new ServiceCollection();
 3                 serviceCollection.AddHttpClient();
 4                 var serviceProvider = serviceCollection.BuildServiceProvider();
 5                 //var serviceProvider = new ServiceCollection().AddHttpClient().BuildServiceProvider();  //等价于以上三句话
 6                 IHttpClientFactory httpClientFactory = serviceProvider.GetService<IHttpClientFactory>();
 7 
 8                 //下面是使用
 9                 string url2 = "http://XXX:8055/Home/SendAllMsg";
10                 var client = httpClientFactory.CreateClient();
11                 var content = new StringContent("msg=123", Encoding.UTF8, "application/x-www-form-urlencoded");
12                 var response = client.PostAsync(url2, content).Result;
13                 string result = "";
14                 if (response.IsSuccessStatusCode)
15                 {
16                     result = response.Content.ReadAsStringAsync().Result;
17                 }
18             }

2. 数据保护

  添加程序集:【Microsoft.AspNetCore.DataProtection】

 1  {
 2                 var serviceCollection = new ServiceCollection();
 3                 serviceCollection.AddDataProtection();
 4                 var serviceProvider = serviceCollection.BuildServiceProvider();
 5                 var dataProtectionProvider = serviceProvider.GetRequiredService<IDataProtectionProvider>();
 6                
 7                 //下面是使用
 8                 var protector = dataProtectionProvider.CreateProtector("DataProtectionSample.Program");
 9                 string input = "ypf001";
10                 string protetedPayload = protector.Protect(input);
11                 string unprotectedPayload = protector.Unprotect(protetedPayload);
12 }

3. 注入对象(类与接口)

  比如可以利用AddSingleton声明成单例的。

 1  public interface IUserService
 2  {
 3    string GetInfor();
 4  }
 5  public class UserService : IUserService
 6  {
 7    public string GetInfor()
 8    {
 9      return "ypf123";
10    }
11  }
12  {
13    var serviceCollection = new ServiceCollection();
14    serviceCollection.AddSingleton<IUserService, UserService>();
15    var serviceProvider = serviceCollection.BuildServiceProvider();
16    IUserService userService = serviceProvider.GetRequiredService<IUserService>();
17 
18    //下面是使用
19    var result = userService.GetInfor();
20 }

4. 读取配置文件

  添加程序集:【Microsoft.Extensions.Configuration】和【Microsoft.Extensions.Configuration.Json】,并将配置文件属性改为“始终复制”。

1  {
2      //注:配置文件要改成始终复制
3      var configurationBuilder = new ConfigurationBuilder().SetBasePath(Directory.GetCurrentDirectory()).AddJsonFile("appsettings.json", optional: true, reloadOnChange: true);
4      var Configuration = configurationBuilder.Build();
5      //下面是使用
6      var data1 = Configuration["MyFullName"];
7  } 

 5. EFCore

//方式1:通过注入的方式获取EFCore上下文
ServiceCollection services = new();
services.AddDbContext<MyDbContext>(opt => opt.UseSqlServer("Server=localhost;Database=DDD1;User ID=sa;Password=123456;"));
var dbContext=services.BuildServiceProvider().GetRequiredService<MyDbContext>();


//方式2:直接创建
var optionsBuilder = new DbContextOptionsBuilder<MyDbContext>();         
optionsBuilder.UseSqlServer("Server=localhost;Database=DDD1;User ID=sa;Password=123456;");
MyDbContext dbContext = new MyDbContext(optionsBuilder.Options);

 

 

 

 

!

  • 作       者 : Yaopengfei(姚鹏飞)
  • 博客地址 : http://www.cnblogs.com/yaopengfei/
  • 声     明1 : 本人才疏学浅,用郭德纲的话说“我是一个小学生”,如有错误,欢迎讨论,请勿谩骂^_^。
  • 声     明2 : 原创博客请在转载时保留原文链接或在文章开头加上本人博客地址,否则保留追究法律责任的权利。
 

 

posted @ 2019-12-31 08:21  Yaopengfei  阅读(1078)  评论(1编辑  收藏  举报