有时似乎无法使用界面包围我,并且我试图调用它。对不起,我意识到这应该很简单,但我发现的例子不起作用。
我有:
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?
}
}
}
答案 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
}