简单:我注意到,在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)?
答案 0 :(得分:0)
我对ASP.NET不够熟悉,无法为您提供完整的答案。
我可以告诉您,将Action<T>
作为参数意味着该库确保您传递他们可以调用的东西。这是callback。
他们将使用它来为您提供T
对象。他们为什么要这样做(而不是返回T
或使用out
参数)?也许他们在您运行代码后需要进行一些清理,例如,他们将捕获异常,进行同步,分配资源……之类的东西。
使用回调的另一个优点是,库控制着您是否运行代码。如果它们给您一个T
对象(也许还有一个bool
来告诉您运行代码),您可能会忽略它们。
这也可能是因为该代码打算在特定线程中运行,甚至可能是将来它们会在需要时运行它,甚至可能是多次。实际上,他们可以像事件一样使用它,只是您不能在任意时间进行订阅和取消订阅。