2016-09-26 45 views
0

我有一個接口,它有一個方法的原型:如何調用一個類的異步方法到c#中的另一個類?

public interface IDataReceiver 
{ 
    Task<HttpResponseMessage> ReceiveAsync(string id, HttpRequestMessage request); 

} 

我有一個抽象類繼承接口

public abstract class DataReceiver :IDataReceiver 
    { 

     protected DataReceiver() 
     { 
     } 
     public abstract Task<HttpResponseMessage> ReceiveAsync(string id, HttpRequestMessage request); 
     protected virtual async Task<NameValueCollection> ReadAsFormDataAsync(HttpRequestMessage request) 

    { 
      //code to read the html request body 
    } 

} 

我有另一個類繼承DataReceiver

public class Reciever1 :DataReceiver 
    { 
     internal const string TokenParameter = "token"; 

     public override async Task<HttpResponseMessage> ReceiveAsync(string id, HttpRequestMessage request) 
     { 
      if (id == null) 
      { 
       throw new ArgumentNullException(id); 
      } 

      // Read the request entity body 
      NameValueCollection data = await ReadAsFormDataAsync(request); 
      string token = data[TokenParameter]; 
      HttpResponseMessage tstmsg = request.CreateResponse(HttpStatusCode.OK, "Success"+token); 
      return tstmsg; 
} 
} 

我有控制器類

public class TestController : ApiController 
    { 
     [HttpPost] 

     public Task<HttpResponseMessage> ProcessData(string name) 
     { 
      retrun ProcessWebhook(name); 
     } 

     private async Task<HttpResponseMessage> ProcessWebhook(string RecieverName) 
     { 
      //how to call the ReceiveAsync method of Reciever1 class 

      return Request.CreateResponse(HttpStatusCode.OK, "Success" +" "+ RecieverName); 

      } 
} 

我想打電話給ReceiveAsync在ProcessWebhook的TestController類但是沒能做到that.i嘗試使用classname.methodname的方式,但它沒有顯示的方法Reciever1類的方法方法。

對此有什麼想法嗎?

謝謝!

回答

0

在TestController中,您需要有一個實例Reciever1。使用new關鍵字創建它:var receiver = new Reciever1();或者如果您使用DependencyInjection,則從IoC容器解析它。

要調用使用它的類名如classname.methodname的方法,該方法必須標記爲static

+0

謝謝....... – TechnoSavvy

相關問題