.NET Core DI简单介绍

简介: 依赖注入的基础

依赖注入的基础

我们都知道DI,,他是一种开发模式。他是将服务可被应用程序任何位置的代码使用,当某个代码组件(如一个类)需要引用某些外部代码(一个服务)时。都有两种选择

1:直接在调用代码种创建服务组件的一个新实例。

2:收到该服务的一个有效实例。

比如一个操作是记录操作记录。那么看以下代码。业务逻辑和记录操作紧密耦合

publicvoid  Home()         {             var log=new Logger();             log.Log("Waring");          }

如果该类移动到其他位置,那么必须也要移动所有引用和依赖,如果有数据库操作。那么使用的地方都要有数据库连接,

如果解耦

privatereadonly ILogger _logger;         public HomeController(ILogger  logger)         {             _logger = logger;         }      publicvoid  Home()         {             var log=new Logger();             log.Log("Waring");          }

将其抽象为ILogger 接口,通过构造函数注入。

当然如果过度使用依赖注入,那么会有这样。依赖的有其他的依赖。以此类推。

可以使用DI框架。同时也叫IOC框架

var logger=SomeFrameworkIoC.Resolve(typeof(ILogger));

Service Locator模式

松耦合调用外部依赖,并非只有依赖注入。还有Service Locator。它能够创建与指定抽象类型匹配的实例。DI和它的关键区别在于,DI要求相应地设计外围代码;构造方法与其他方法的签名可能会发生变化。而它保守。  可读性差一点。当庞大的现有代码库种重构依赖时,它是一个理想选择。

如下:

publicvoid Perform() {    var logger=HttpContext.RequestService.GetService<ILogger>();    }

这是RequestService对象在HTTP上下文中扮演了Service Locator角色。

当然依赖注入的生命周期。大家想必都有所了解。我这里简单说一下

image.png

相关文章
|
5天前
|
开发框架 前端开发 中间件
聊聊 ASP.NET Core 中间件(二):中间件和筛选器的区别
聊聊 ASP.NET Core 中间件(二):中间件和筛选器的区别
|
5天前
|
开发框架 缓存 NoSQL
聊聊 ASP.NET Core 中间件(一):一个简单的中间件例子
聊聊 ASP.NET Core 中间件(一):一个简单的中间件例子
|
5天前
|
开发框架 .NET 数据库连接
闲话 Asp.Net Core 数据校验(三)EF Core 集成 FluentValidation 校验数据例子
闲话 Asp.Net Core 数据校验(三)EF Core 集成 FluentValidation 校验数据例子
|
5天前
|
开发框架 前端开发 .NET
闲话 ASP.NET Core 数据校验(二):FluentValidation 基本用法
闲话 ASP.NET Core 数据校验(二):FluentValidation 基本用法
|
5天前
|
开发框架 .NET API
如何在 ASP.NET Core Web Api 项目中应用 NLog 写日志?
如何在 ASP.NET Core Web Api 项目中应用 NLog 写日志?
|
5天前
|
开发框架 中间件 .NET
分享 ASP.NET Core Web Api 中间件获取 Request Body 两个方法
分享 ASP.NET Core Web Api 中间件获取 Request Body 两个方法
|
5天前
|
开发框架 中间件 .NET
聊聊 ASP.NET Core 中间件(三):如何创建自己的中间件?
聊聊 ASP.NET Core 中间件(三):如何创建自己的中间件?
|
4天前
|
开发框架 前端开发 .NET
ASP.NET MVC WebApi 接口返回 JOSN 日期格式化 date format
ASP.NET MVC WebApi 接口返回 JOSN 日期格式化 date format
10 0
|
5天前
|
开发框架 前端开发 安全
ASP.NET MVC 如何使用 Form Authentication?
ASP.NET MVC 如何使用 Form Authentication?
|
8天前
|
开发框架 .NET
Asp.Net Core 使用X.PagedList.Mvc.Core分页 & 搜索
Asp.Net Core 使用X.PagedList.Mvc.Core分页 & 搜索
36 0