.NET 低使用频率服务的另类依赖注入方式

一般来讲,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的参数来注入。

订阅评论
提醒
0 评论
最旧
最新 最多投票
内联反馈
查看所有评论
滚动至顶部