依赖注入的基础

我们都知道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角色。

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

最新文章

  1. MySQL的基本知识 -- 命令
  2. 树状sql--采用递归方式获取节点
  3. jQueryNotes仿QQ空间添加标记
  4. rake :You have already activated rake 10.1.0
  5. javascript类型系统——Number数字类型
  6. ASP.NET C#_HTML练习
  7. Note_Master-Detail Application(iOS template)_05_ YJYMasterViewController.m
  8. 【基本算法】 KMP文本串模式串的字符串匹配算法
  9. SweetAlert 使用
  10. java封装和多态
  11. python连接redis002
  12. 201521123010 《Java程序设计》第6周学习总结
  13. Java IO流 思维导图
  14. linux 生成随机密码和wordlist常用方法
  15. 如何joomla修改版权信息
  16. SQL 姓名,联系方式-脱敏
  17. Windows下Python安装numpy+mkl,Scipy和statsmodels
  18. Django多表查询练习题
  19. iOS开发:代码通用性以及其规范 第一篇(附带,自定义UITextView\进度条\双表显示\瀑布流 代码设计思路)
  20. e866. 确定可用外观

热门文章

  1. jdk8 ConcurrentHashMap分析
  2. Django自动化测试平台项目案例
  3. what can we do if just only want to truncate transaction log without backup ?
  4. How to check sqlsever table data type identity status ?
  5. LeetCode29 Medium 不用除号实现快速除法
  6. 在C#中通过使用Newtonsoft.Json库来解析百度地图地理编码(GeoCoder)服务接口返回的Json格式的数据
  7. tomcat 多端口 多容器 多域名 配置
  8. linux的目录结构知识
  9. Waymo-自动驾驶长尾问题挑战(2019)
  10. 【全集】大数据Linux基础