侧边栏壁纸
博主头像
996 Worker's Blog博主等级

祇園精舎の鐘の聲, 諸行無常の響き有り。

  • 累计撰写 215 篇文章
  • 累计创建 55 个标签
  • 累计收到 25 条评论

目 录CONTENT

文章目录

ASP.NET Core依赖注入

996Worker
2022-07-18 / 0 评论 / 0 点赞 / 133 阅读 / 1553 字

用途

让.NET框架负责实例化并且注入对象,不用程序员自己手动new对象,从而降低耦合和劳力。

步骤

1. 注册服务

首先在Program.cs里注册自己的对象。例如

builder.Services.AddSingleton<IUserBll, UserBll>();

其中,泛型的第一个是接口,第二个是具体实现类。然后会把该实现类注入到对应接口的字段里。

另外,可以注册三种类型的Bean:

  • Singleton: 单例生命周期。单例生命周期服务在它们第一次被请求时创建,并且每个后续请求将使用相同的实例。
  • Scoped:作用域生命周期。作用域生命周期服务在每次请求时被创建一次。在同一个页面内多个Scoped是相同的,在不同页面中是不同的.
  • Transient:瞬时生命周期。瞬时生命周期服务在它们每次请求时被创建。这一生命周期适合轻量级的、无状态的服务。对象对每个对象和每个请求是相同的. 同一个页面内的Transient也是不同的.

复习:Java Spring Boot Bean的Scope: singleton - 在Spring的IoC容器中只存在一个对象实例,所有该对象的引用都共享这个实例,适合无状态的bean;prototype - 每次对该bean的请求都会创建一个新的实例。request - 每次http请求将会有各自的bean实例,类似于prototype。session - 每个http session对应一个bean实例。application - application作用域表示该针对整个web项目生命周期。global session - 类似于标准的HTTP Session作用域,不过它仅仅在基于portlet的web应用中才有意义。

2. 注入

在控制器中,框架会通过Controller的构造器实现注入,例如:

[Route("api/[controller]")]
    [ApiController]
    public class LoginController : ControllerBase
    {
        private readonly IUserBll userBll;

        public LoginController(IUserBll userBll)
        {
            this.userBll = userBll;
        }
        [HttpGet]
        public string Get(string userNo, string password)
        {
            return userBll.CheckLogin(userNo, password) ? "Success." : "denied.";
        }
    }
0

评论区