.net6 WebApi 如何将变量注入到控制器 以及配置文件的读取

前言

WebApi 的套路还是很直白的,入门还是比较简单。

一个顶级文件Program.cs负责初始化配置工作,再配上几个控制器,就能写出微服务了。

今天介绍两个小技巧:

1 如何将变量注入到控制器

2 配置文件的读取

如何将变量注入到控制器

比如我在顶级文件Program.cs中初始化一个变量,怎么传到控制器呢?答案是注入。

不像wpf要借助prsim这类的框架,.net6提供的原始的WebApi就自带容器,我们可以方便的进行依赖注入。

比如我有一个类叫做Call,构造一个Call需要一个ip地址,而这个地址是写入appsettings.json配置文件的。

我的想法是,在Program.cs中读取配置,然后构造Call,然后再通过控制器的构造函数注入Call对象。

先添加注册:

builder.Services.AddTransient<Call>();

但是这个构造的是无参的Call,怎么构造有个有参的Call?

下面这种方式,构造一个有参的Call:

builder.Services.AddTransient<Call>(x => {
        return new Call(builder.Configuration["FSD:ipaddr"]);
    });

 这个x是啥?(用到了再研究吧,先放这里) 

通过控制器的构造函数注入

        Call call;

        public Test2Controller(ILogger<Test2Controller> logger, Call call)
        {
            _logger = logger;
            this.call = call;
        }

这样就能拿到,刚刚实例化的call。

不过到了这里,我发现有个事情有点”怪异“,因为这个构造函数再每次Post请求的时候,都回被调用,那岂不是,Call每次都被重新构造?我是网上收了一下,发现有个网友也提出了类似的疑问,

然后有个人是这么回答的:

 

翻译一下:

 

就是说,请求之后控制器对象都会被丢弃,更别说里面的变量了。 

再回头看看,AddTransient,Transient就是瞬时的意思。Http确实也是状态无关的,是个短连接,保存似乎是没有啥意义,但是这样注入是不是会减慢速度呢?不过暂时我是接受了这种说法。

 配置文件的读取

上面有句代码:

builder.Configuration["FSD:ipaddr"]

这个是在读取appsettings.json配置中的内容,微软确实很贴心啊,这些东西都给配套好了啊。

{
  "FSD": {
    "ipaddr": "http://localhost:9051/WebService1.asmx"
  }
}

主要的读取方法,入下图所示: 

 这里要注意以下,如果你直接读取builder.Configuration["FSD"]是不行的,会返回null,你可能需要尝试,图中第四种方式,才能读取FSD中的内容。

今天就到这,下次接着聊~~~~

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

code bean

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值