C# 使用restful web服务

C# 使用restful web服务,c#,xamarin,C#,Xamarin,我正在尝试使用一个接口,但我在这里遇到了一些困难。 我试图将其设置为内容页后面的xamrin列表视图 public class xxxApiClient : IApi { readonly string url = "http://localhost:81/ "; readonly IHttpService httpService; public xxxApiClient(IHttpService httpService) {

我正在尝试使用一个接口,但我在这里遇到了一些困难。 我试图将其设置为内容页后面的xamrin列表视图

public class xxxApiClient : IApi
 {
        readonly string url = "http://localhost:81/ ";
        readonly IHttpService httpService;

        public xxxApiClient(IHttpService httpService)
        {
            this.httpService = httpService;
        }

        public Task<List<JobsList>> GetJobs() => httpService.Get<List<JobsList>>($"{url}JobsLists");
}
如何在方法setItemSource?中正确使用上面的get作业

我很难理解的一点就在这里

如何调用已在API客户端中创建的基本GetJobs方法

      Task<List<JobsList>> IApi.GetJobs()
        {
            throw new NotImplementedException();
        }

        private Task SetItemSource()
     {
            JobListings.ItemsSource =await GetJobs();
    }
}
但是我得到了下面的错误

严重性代码说明项目文件行抑制状态 错误CS0236字段初始值设定项无法引用非静态 字段、方法或属性 “JobsPage.httpService”xxxCallManagementAppMobile C:\Work\xxxCallAppDev\XamForms\xxxCallManagementApp\xxxCallManagementAppMobile\FuelCallManagementAppMobile\Views\JobsPage.xaml.cs 17处于活动状态

有人能解释为什么吗

编辑3 好的,我有点进一步,但仍然有一些问题。由于未等待main方法,我如何调用set SetItemSource

xxxApiClient _api ;
      public JobsPage ()
    {
        InitializeComponent ()
            SetItemSource();

    }

    private async Task SetItemSource()
 {
        JobListings.ItemsSource = await client.GetJobs();
}

假设
IApi
已映射到
xxxApiClient
实现

尝试使用解析服务,以便在视图中使用该服务

public partial class JobsPage : ContentPage {
    public readonly IApi client;

    public JobsPage () {
        InitializeComponent ();
        client = DependencyService.Get<IApi>();
    }

    private async Task SetItemSource() {
        JobListing.ItemsSource = await client.GetJobs();
        //...
    }
}
完整代码

public partial class JobsPage : ContentPage {
    public readonly IApi client;

    public JobsPage () {
        InitializeComponent ();
        //resolving client
        client = DependencyService.Get<IApi>();
        //subscribing to event 
        loadingData += onLoadingData;
        //raising event
        loadingData(this, EventArgs.Empty);
    }

    private async Task SetItemSource() {
        JobListing.ItemsSource = await client.GetJobs();
        //...
    }

    private event EventHandler loadingData = delegate { };
    private async void onLoadingData(object sender, Eventargs args) {
        JobListing.ItemsSource =   await client.GetJobs();
    }
}
public分部类作业页面:ContentPage{
公共只读IApi客户端;
公职人员{
初始化组件();
//解析客户端
client=DependencyService.Get();
//订阅活动
加载数据+=加载数据;
//募捐活动
加载数据(此为EventArgs.Empty);
}
专用异步任务SetItemSource(){
JobListing.ItemsSource=await client.GetJobs();
//...
}
private EventHandler loadingData=委托{};
私有异步void onLoadingData(对象发送方、事件args args){
JobListing.ItemsSource=await client.GetJobs();
}
}
尽管创建了自定义事件,但您也可以在视图的事件/事件处理程序上轻松地使用它


所有这些代码实际上都应该存在于视图模型中,然后在绑定上下文中绑定到视图。

您的意思是“困难”而不是“延展性”吗?后者是一个词,但有一个非常具体的技术含义,这在这里很奇怪。我很犹豫是否要编辑,因为我想尊重你的单词选择。对不起,迈克,我拼写不好,请不要在我的问题中反对我。更正了错误,你也能将IApi注入内容页吗?是的,但这就是我难以理解的@Nkosi@DavidB我来看看。我建议您在发布时努力编写适当的代码示例,因为这些不完整的代码片段非常令人困惑。它们应该是一个
public partial class JobsPage : ContentPage {
    public readonly IApi client;

    public JobsPage () {
        InitializeComponent ();
        client = DependencyService.Get<IApi>();
    }

    private async Task SetItemSource() {
        JobListing.ItemsSource = await client.GetJobs();
        //...
    }
}
private event EventHandler loadingData = delegate { };
private async void onLoadingData(object sender, Eventargs args) {
    JobListing.ItemsSource =   await client.GetJobs();
}
public partial class JobsPage : ContentPage {
    public readonly IApi client;

    public JobsPage () {
        InitializeComponent ();
        //resolving client
        client = DependencyService.Get<IApi>();
        //subscribing to event 
        loadingData += onLoadingData;
        //raising event
        loadingData(this, EventArgs.Empty);
    }

    private async Task SetItemSource() {
        JobListing.ItemsSource = await client.GetJobs();
        //...
    }

    private event EventHandler loadingData = delegate { };
    private async void onLoadingData(object sender, Eventargs args) {
        JobListing.ItemsSource =   await client.GetJobs();
    }
}