在WPF的Prism框架中使用DryiocIOC注入IHttpClientFactory

项目中需要经常请求API,请求次数越频繁时,由于是瞬态,系统响应变慢,故记录一下

参照

WPF Prism8.0中注册Nlog日志服务 - 痕迹g - 博客园 ,痕迹大佬使用5.0库实现Logger

包安装

DryIoc.Microsoft.DependencyIn6.2.0

Microsoft.Extensions.DependencyInjection9.0.4

重写IContainerExtension 方法

   protected override IContainerExtension CreateContainerExtension()
   {
      
       var serviceCollection = new ServiceCollection();

       serviceCollection.AddHttpClient();
       return new DryIocContainerExtension(
           new Container(CreateContainerRules()).WithDependencyInjectionAdapter(
               serviceCollection
           )
       );
   }

 如果是5.0的DryIoc.Microsoft.DependencyIn则不需要重写CreateContainerRules

6.2.0需要重写

  protected override Rules CreateContainerRules()
  {
      return Rules
          .Default.WithConcreteTypeDynamicRegistrations(reuse: Reuse.Transient)
          .With(Made.Of(FactoryMethod.ConstructorWithResolvableArguments))
          .WithFuncAndLazyWithoutRegistration()
          .WithTrackingDisposableTransients()
          .WithFactorySelector(Rules.SelectLastRegisteredFactory());
  }

 在MainViewModel使用

//ctor
public MainViewModel(
    IRegionManager regionManager,
    IHttpClientFactory httpClientFactor,
    IContainer container
)
{
    var client = httpClientFactor.CreateClient();
    Get(client);  
}

//Get请求测试
  public async void Get(HttpClient client)
  {
      try
      {
          CancellationTokenSource cts = new CancellationTokenSource(
              TimeSpan.FromSeconds(100)
          );
          var data = await client.GetAsync(
              "http://192.168.110.176:5000/api/GetToken/test",
              cts.Token
          );
          Debug.WriteLine(data);
      }
      catch (OperationCanceledException ex)
      {
        
          Debug.WriteLine(ex.Message);
      }
      catch (Exception ex)
      {
          throw;
      }
  }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值