一般来讲,ASP.NET Core项目中的一个控制器类中会有多个操作方法。
比如一个处理登录的控制器类中会有登录、重置密码、注册、发送短信验证码等多个操作方法。
这些操作方法用到的服务都要通过构造方法来注入。
如果一个操作方法用到的服务的注入比较消耗资源,而这个Action被调用的频率又比较低,那么每次同一个控制器中其他Action被调用的时候,我们都要注入这个很少用到但是很消耗资源的服务。
这种情况下,我们如何实现在执行某个Action的时候才注入特定的服务呢?
我们可以把Action用到的服务通过Action的参数注入,然后在这个参数上标注[FromServices]这个Attribut。
Action用到的其他参数,仍然可以通过Action的其他参数来获取,如以下代码所示:
C#
public string Test([FromServices] MyServicel myServicel,string name)
{
var names = myServicel.GetNames();
return string.Join(", ", names) + "Fxxk" +name;
}
当然,本书作者建议,大部分服务仍然通过控制器的构造方法来注入,只有使用频率不高并且比较消耗资源的服务才通过Action的参数来注入。