在实现调用此接口时遇到问题

时间:2016-05-05 00:29:18

标签: c# interface

有时似乎无法使用界面包围我,并且我试图调用它。对不起,我意识到这应该很简单,但我发现的例子不起作用。

我有:

namespace ApiConnection{
    public interface IRestApiCalls{
        Task<bool> Login(string userName, string password);
    }
}

它的实施

namespace ApiConnection{
    class TestRestApiService : IRestApiCalls    {
        public async Task<bool> Login(string userName, string password){
            //Do whatever
        }
    }
}

我如何致电登录?我有类似的东西:

namespace Bll{
    public class Bll : IBll{  //yes, I can call this interface no problem
        public Login(string userName, string password){
            //What goes here to call the IRestApiCalls.Login interface?
        }
    }
}

2 个答案:

答案 0 :(得分:2)

您不会调用界面。界面只是定义了您的类必须遵守的合同。

您可以像其他任何方式一样调用该方法:

var myService = new TestRestApiService();
myService.Login("rob", "hunter2");

但是,由于它是一个界面,你可以写这样的东西:

public void LoginService(IRestApiCalls service)
{
    service.Login("rob", "hunter2");
}

这意味着你不关心你所给予的课程,只要他们遵守界面IRestApiCall中所列的合同

答案 1 :(得分:1)

假设您无法使用 登录方法async,则可以使用WaitAndUnwrapException

IRestApiCalls rest = ...
var task = rest.Login(userName, password);
var result = task.WaitAndUnwrapException();
if (!result) {
    // Login has failed
}

如果您可以选择制作自己的Login方法async,则可以从REST对象await Login代替:

IRestApiCalls rest = ...
var result = await rest.Login(userName, password).ConfigureAwait(false);
if (!result) {
    // Login has failed
}