[英].NET Core - BLAZOR - Custom component - Store async Task in dictionary for later usage with EventCallback
我有一個定制的 Blazor 組件,它有一個帶參數的字典。
它是一個通用組件,位於主布局<SharedComponent></SharedComponent>
中。
該組件在其中呈現另一個組件並通過字典傳遞參數 - 在下面的代碼行中, dic 是parameters
。 以下代碼呈現子組件。
ComponentService.Add<ChildComponent>(text, parameters, taskParameters);
PS:有兩個字典: - 一個用於普通參數; - 一個用於功能。
我認為應該如何實現:
Func
委托的字典中。我的問題:
這是完全正確的方法還是有其他方法?
到目前為止我已經嘗試過什么,我需要一些幫助......
這是字典:
public class ComponentTaskParameters
{
private Dictionary<string, Func<Task>> taskPparameters;
public ComponentTaskParameters()
{
taskPparameters = new Dictionary<string, Func<Task>>();
}
public void Add(string parameterName, Func<Task> value)
{
taskPparameters[parameterName] = value;
}
public Func<Task<T>> Get<T>(string parameterName)
{
if (!taskPparameters.ContainsKey(parameterName))
{
throw new KeyNotFoundException($"{parameterName} does not exist in component parameters");
}
return (Func<Task<T>>)taskPparameters[parameterName];
}
}
假設這是異步 function:
async Task SaveItem(Item item)
{
// save code
}
我試圖用Func
和Action
將它存儲到字典中,但沒有運氣。
我怎么能做到這一點,它是否可以實現?
我創建了一個代表
delegate Item SaveItemDelegate(Func<Task, Item> saveTask);
我無法將檢索到的 function 從字典中添加到委托中。
這是我創建EventCallback
的方法
var callbackEvent = new EventCallback<Item>(null, saveItemDelegate);
而且我無法使用CallbackEvent.InvokeAsync(Item);
.
感謝這里的所有幫助。
謝謝!
解決方案是將 SaveItem function 作為多播委托存儲在字典中。
// Insert into dict function
public void Add(string parameterName, MulticastDelegate value)
{
taskPparameters[parameterName] = value;
}
// Declaration of the delegate
public delegate Task SaveDelegate(Item item);
// New delegate
SaveDelegate saveDelegate = new SaveDelegate(SaveItem);
// Store the delegate in the dictionary
taskParameters.Add("CallbackFunction", saveDelegate);
然后我能夠檢索它並將其傳遞給EventCallback
。 然后成功調用它。
// Pull out from the dict function
public MulticastDelegate Get(string parameterName)
{
return taskPparameters[parameterName];
}
// The delegate
MulticastDelegate save = TaskParameters.Get("CallbackFunction");
// Create new 'EventCallback'
EventCallback callback = new EventCallback(null, save);
// Invoke the 'EventCallback'
callback.InvokeAsync(item);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.