我想知道为什么Microsoft没有在Invoke
抽象类中定义抽象方法InvokeAsync
或ViewComponent
,而Invoke
方法对于视图组件是否必不可少?
有什么理由吗?
答案 0 :(得分:3)
那只是设计决定。调用视图组件时 - 可以使用任意类型传递任意数量的参数。所有这些参数都将传递给InvokeAsync
方法。要不将它们打包成object[]
数组 - 它允许使用任意数量的强类型参数定义InvokeAsync
方法:
public async Task InvokeAsync(int arg1, string arg2) {
// ...
}
在调用期间,将通过反射检查ViewComponent的方法,并选择具有此调用的正确签名的方法。因为这(InvokeAsync
的任意参数) - 不可能将此方法声明为抽象(或虚拟)。
您也可以在其他地方看到相同的设计,例如Startup
类可以使用名称为Configure
的方法,该方法接受任意数量的参数,并且这些参数将从DI容器中解析,但是启动类不会覆盖父类中的任何方法(实际上在这种情况下根本没有父类)。