3
我掙扎,看到我錯了WRT創建一個委託接口方法createDelegate方法的接口方法
我的代碼如下:
private static Func<HtmlDocument, IObservable<IData>> FindScrapeMethod(ICrawlerStrategy crawler, string scrapeDelegate)
{
Func<HtmlDocument, IObservable<IData>> action;
var fullDelegateName = String.Format("ICrawlerStrategy.{0}", scrapeDelegate);
if (!_delegateCache.TryGetValue(fullDelegateName, out action))
{
var method = typeof(ICrawlerStrategy).GetMethod(scrapeDelegate, BindingFlags.Public | BindingFlags.Instance);
action = (Func<HtmlDocument, IObservable<IData>>)
Delegate.CreateDelegate(typeof(Func<HtmlDocument, IObservable<IData>>), crawler, method);
_delegateCache.Add(fullDelegateName, action);
}
return action;
}
接口聲明
public interface ICrawlerStrategy
{
Func<HtmlDocument, IObservable<IData>> ExtractorAsync();
}
執行類如下
public class MyCrawler : ICrawlerStrategy
{
<snip>
Func<HtmlDocument, IObservable<IData>> ICrawlerStrategy.ExtractorAsync()
{
return (doc) => AsyncScraper(doc);
}
}
EDIT1 - 作爲的要求@Yahia:
public IObservable<IData> AsyncScraper(HtmlDocument page)
當試圖創建委託我得到一個「錯誤綁定到目標方法」。當我踏上代碼,
- 方法不爲空,因此它可以明顯發現該方法的類型
- 的實例也是不爲空,以及
任何指針,請。
THX
小號
請顯示'AsyncScraper'的聲明和調用incl ude參數定義爲'FindScrapeMethod' ... – Yahia