.NET Core DI简单介绍
2024-10-08 07:49:11
依赖注入的基础
我们都知道DI,,他是一种开发模式。他是将服务可被应用程序任何位置的代码使用,当某个代码组件(如一个类)需要引用某些外部代码(一个服务)时。都有两种选择
1:直接在调用代码种创建服务组件的一个新实例。
2:收到该服务的一个有效实例。
比如一个操作是记录操作记录。那么看以下代码。业务逻辑和记录操作紧密耦合
public void Home()
{
var log=new Logger();
log.Log("Waring");
}
如果该类移动到其他位置,那么必须也要移动所有引用和依赖,如果有数据库操作。那么使用的地方都要有数据库连接,
如果解耦
private readonly ILogger _logger; public HomeController(ILogger logger)
{
_logger = logger;
}
public void Home()
{
var log=new Logger();
log.Log("Waring");
}
将其抽象为ILogger 接口,通过构造函数注入。
当然如果过度使用依赖注入,那么会有这样。依赖的有其他的依赖。以此类推。
可以使用DI框架。同时也叫IOC框架
var logger=SomeFrameworkIoC.Resolve(typeof(ILogger));
Service Locator模式
松耦合调用外部依赖,并非只有依赖注入。还有Service Locator。它能够创建与指定抽象类型匹配的实例。DI和它的关键区别在于,DI要求相应地设计外围代码;构造方法与其他方法的签名可能会发生变化。而它保守。 可读性差一点。当庞大的现有代码库种重构依赖时,它是一个理想选择。
如下:
public void Perform()
{
var logger=HttpContext.RequestService.GetService<ILogger>(); }
这是RequestService对象在HTTP上下文中扮演了Service Locator角色。
当然依赖注入的生命周期。大家想必都有所了解。我这里简单说一下
最新文章
- MySQL的基本知识 -- 命令
- 树状sql--采用递归方式获取节点
- jQueryNotes仿QQ空间添加标记
- rake :You have already activated rake 10.1.0
- javascript类型系统——Number数字类型
- ASP.NET C#_HTML练习
- Note_Master-Detail Application(iOS template)_05_ YJYMasterViewController.m
- 【基本算法】 KMP文本串模式串的字符串匹配算法
- SweetAlert 使用
- java封装和多态
- python连接redis002
- 201521123010 《Java程序设计》第6周学习总结
- Java IO流 思维导图
- linux 生成随机密码和wordlist常用方法
- 如何joomla修改版权信息
- SQL 姓名,联系方式-脱敏
- Windows下Python安装numpy+mkl,Scipy和statsmodels
- Django多表查询练习题
- iOS开发:代码通用性以及其规范 第一篇(附带,自定义UITextView\进度条\双表显示\瀑布流 代码设计思路)
- e866. 确定可用外观
热门文章
- jdk8 ConcurrentHashMap分析
- Django自动化测试平台项目案例
- what can we do if just only want to truncate transaction log without backup ?
- How to check sqlsever table data type identity status ?
- LeetCode29 Medium 不用除号实现快速除法
- 在C#中通过使用Newtonsoft.Json库来解析百度地图地理编码(GeoCoder)服务接口返回的Json格式的数据
- tomcat 多端口 多容器 多域名 配置
- linux的目录结构知识
- Waymo-自动驾驶长尾问题挑战(2019)
- 【全集】大数据Linux基础