使用反射的 .NET Core 7 动态组件.NET Core 7 Dynamic Component using reflection

.NET Core 7 Dynamic Component using reflection

提问人:user97492 提问时间:11/11/2023 最后编辑:user97492 更新时间:11/11/2023 访问量:16

问:

我有一个父 .razor 组件和一个子组件,在子组件中我加载了一个带有参数的动态组件......到目前为止,一切都正常,它加载了,我可以从数据库中检索数据。我的问题是,当我单击更新按钮时,我需要在 DynamicComponentFooter1 中调用一个名为“Update”的方法。

Picture.razor (父级)

<AMS.Resources.UI.Pages.Picture.Picture_Base @ref="Picture"
DynamicComponentFooter1="@DynamicComponentFooter1" DynamicComponentFooter1Parameters="@DynamicComponentFooter1Parameters" />

[Parameter] public Type? DynamicComponentFooter1 { get; set; }
[Parameter] public Dictionary<string, object>? DynamicComponentFooter1Parameters { get; set; }

图片.razor.cs (我创建了名为Picture_Membership的动态组件)

this.DynamicComponentFooter1Parameters = new Dictionary<string, object>();

this.DynamicComponentFooter1Parameters.Add("UserCurrentClassName", "Picture_Membership");
this.DynamicComponentFooter1Parameters.Add("UserCurrentAction", "view");
this.DynamicComponentFooter1Parameters.Add("PictureID", "1");

this.DynamicComponentFooter1 = typeof(AMS.Resources.UI.Pages.Picture_Membership.Picture_Membership_Base);

到目前为止一切正常,但是当我单击父项中的“更新”按钮时,我也需要通过反射或任何其他方式调用动态控件中的“更新”方法。正常的方法是添加一个 @ref=“Picture_Membership” 标签并调用 Picture_Membership.Update();但是当我发送动态控件时,我没有看到可以添加它的方法。

更新方法是异步任务:

public async Task<bool> Update()
{
    return true;
}

我没有看到可以添加@ref标签的方法,因此尝试了以下方法:

var methodInfo = this.Picture.DynamicComponentFooter1.GetMethod("Update");

Type[] typeArgs = { typeof(Task<bool>) };
var genericMethodInfo = methodInfo.MakeGenericMethod(typeArgs);

var result = genericMethodInfo.Invoke(null, new object[]{});

但是我收到以下错误:

An exception of type 'System.InvalidOperationException' occurred in System.Private.CoreLib.dll but was not handled in user code: 'System.Threading.Tasks.Task`1[System.Boolean] Update() is not a GenericMethodDefinition. MakeGenericMethod may only be called on a method for which MethodBase.IsGenericMethodDefinition is true.'

enter image description here

我做错了什么?

任何帮助将不胜感激:)

剃须刀 反射

评论


答: 暂无答案