将功能参数作为Action <t>而不是仅T常见吗?为什么?

时间:2019-04-26 12:53:38

标签: c# asp.net-mvc asp.net-core function-parameter

简单:我注意到,在ASP.NET Core MVC应用程序中,某些函数的参数通常使用类型Action<T>而不是类型T。有点奇怪,我在哪里可以找到更多信息?

示例

services.AddDbContext<FssDbContext>(options => 
  options.UseSqlServer(-something-));

更详细: 我是ASP.NET Core的新手,但不是.NET。我现在正在研究Web ASP.NET Core MVC项目,并且我注意到许多函数调用直接将System.Action<T>而不是T作为参数。我想这在某种程度上与DI密切相关,并且“不要让代码用户创建实例,而是要给他一些实例进行调整”,但是我想了解更多有关此的信息-特别是如果这是.NET MVC / Core以及应在何处使用(不建议在何处使用),或者即使它是一些众所周知的定义概念,我也缺少。

但是,我仅凭简单用法就找不到任何东西。

是否有任何资源描述这种行为,动机和建议?

同样,我对“如何创建这样的行为”不感兴趣,因为我对“一般性观点”不感兴趣,但是如果对此概念有某种官方定义或全球知名的建议,“ )是否应该在.NET MVC / Core项目中使用它”(例如,来自MS)?

1 个答案:

答案 0 :(得分:0)

我对ASP.NET不够熟悉,无法为您提供完整的答案。

我可以告诉您,将Action<T>作为参数意味着该库确保您传递他们可以调用的东西。这是callback

他们将使用它来为您提供T对象。他们为什么要这样做(而不是返回T或使用out参数)?也许他们在您运行代码后需要进行一些清理,例如,他们将捕获异常,进行同步,分配资源……之类的东西。

使用回调的另一个优点是,库控制着您是否运行代码。如果它们给您一个T对象(也许还有一个bool来告诉您运行代码),您可能会忽略它们。

这也可能是因为该代码打算在特定线程中运行,甚至可能是将来它们会在需要时运行它,甚至可能是多次。实际上,他们可以像事件一样使用它,只是您不能在任意时间进行订阅和取消订阅。