【问题标题】:AddRefitClient DryIoc and IServiceProvider on Prism for Xamarin.FormsAddRefitClient DryIoc 和 IServiceProvider 在 Prism 上用于 Xamarin.Forms
【发布时间】:2020-09-09 02:24:58
【问题描述】:

我正在尝试关注DryIoc and IServiceProvider on Prism for Xamarin.Forms (DryIoc.Microsoft.DependencyInjection),但我正在使用 RefitClient for IHttpClientFactory

containerRegistry.RegisterServices(services =>
            {
                services.AddTransient<HttpLoggingHandler>();
                services.AddTransient<AuthorizationDelegatingHandler>();

                services.AddRefitClient<IMyApi>()
                    .ConfigureHttpClient(c =>
                        c.BaseAddress =
                            new Uri(apiBaseUrl))
                    .AddHttpMessageHandler<AuthorizationDelegatingHandler>()
                    .AddHttpMessageHandler<HttpLoggingHandler>()
                    .AddTransientHttpErrorPolicy(builder => builder.WaitAndRetryAsync(new[]
                    {
                        TimeSpan.FromMilliseconds(300),
                        TimeSpan.FromSeconds(600),
                        TimeSpan.FromSeconds(800)
                    }))
                    .AddTransientHttpErrorPolicy(
                        p => p.CircuitBreakerAsync(5, TimeSpan.FromSeconds(30)));
            });

我已经添加了

protected override IContainerExtension CreateContainerExtension() =&gt; PrismContainerExtension.Current;

当我尝试使用 IMyApi 发出请求时。

BaseAddress must be set on the HttpClient instance
  at Refit.RequestBuilderImplementation+<>c__DisplayClass14_0`2[T,TBody].<BuildCancellableTaskFuncForMethod>b__0 (System.Net.Http.HttpClient client, System.Threading.CancellationToken ct, System.Object[] paramList) [0x00030] in /_/Refit/RequestBuilderImplementation.cs:236

【问题讨论】:

  • 您好,您成功了吗?尝试做同样的事情。

标签: xamarin.forms prism refit httpclientfactory


【解决方案1】:

我个人不得不处理所有这些问题,并最终创建了 Apizr,其中内置了身份验证和日志记录处理程序,从注册表解析策略以及连接测试、缓存或优先级等更多功能。如果有帮助的话。

【讨论】:

    【解决方案2】:

    我使用的是 Unity 而不是 Dryloc,但解决方案是相同的。

    关键似乎很大程度上取决于安装正确的软件包。 安装这些:

    Prism.Forms.Extended

    Prism.Unity.Extensions

    protected override void RegisterTypes(IContainerRegistry containerRegistry)
    {
        //Omitted Code
    
        containerRegistry.RegisterServices(serviceCollection =>
        {
            serviceCollection.AddHttpClient<IApiService, ApiService>(client =>
            {
                client.BaseAddress = new Uri("Your Address Here");
            });
        });
    }
    
    public class ApiService : IApiService
    {
        Func<IApi> _createClient;
    
        public ApiService(HttpClient client)
        {
            _createClient = () => 
            {
                return RestService.For<IApi>(client, new RefitSettings
                {
                    ContentSerializer = new NewtonsoftJsonContentSerializer()
                });
            }
        }
    
        public IApi GetApi()
        {
            return new Lazy<IApi>(() => _createClient()).Value;
        }
    }
    

    这篇文章也提供了部分内容:

    https://xamgirl.com/consuming-restful-web-service-xamarin-forms-using-refit-part-2/

    【讨论】:

      猜你喜欢
      • 2020-05-21
      • 1970-01-01
      • 2022-12-22
      • 2018-09-28
      • 2021-07-01
      • 2019-10-06
      • 2019-04-07
      • 2018-07-14
      • 1970-01-01
      相关资源
      最近更新 更多