为什么ViewComponent类没有Invoke方法的抽象定义?

时间:2018-02-02 02:38:11

标签: c# asp.net-core .net-core

我想知道为什么Microsoft没有在Invoke抽象类中定义抽象方法InvokeAsyncViewComponent,而Invoke方法对于视图组件是否必不可少?

有什么理由吗?

1 个答案:

答案 0 :(得分:3)

那只是设计决定。调用视图组件时 - 可以使用任意类型传递任意数量的参数。所有这些参数都将传递给InvokeAsync方法。要不将它们打包成object[]数组 - 它允许使用任意数量的强类型参数定义InvokeAsync方法:

public async Task InvokeAsync(int arg1, string arg2) {
    // ...
}

在调用期间,将通过反射检查ViewComponent的方法,并选择具有此调用的正确签名的方法。因为这(InvokeAsync的任意参数) - 不可能将此方法声明为抽象(或虚拟)。

您也可以在其他地方看到相同的设计,例如Startup类可以使用名称为Configure的方法,该方法接受任意数量的参数,并且这些参数将从DI容器中解析,但是启动类不会覆盖父类中的任何方法(实际上在这种情况下根本没有父类)。