.Net Core 中的 DI使用 - IOC原则
概要:因为不知道写啥,所以随便找个东西乱说几句,嗯,就这样,就是这个目的。
1.IOC是啥呢?
IOC - Inversion of Control,即控制反转的意思,这里要搞明白的就是,它是一种思想,一种用于设计的方式(手段),(并不是前几天园子中刚出的一片说是原则),OO原则不包含它,再说下,他不是原则!!
那么,既然是控制反转,怎么反转的?对吧,说到重点了吧。很简单,通过一个容器,将对象注册到这个容器之后,由这个容器来创建对象,从而免去了手动创建对象以及创建后对象(资源)的获取。
你可能又会问,有什么好处?我直接new不也一样的吗?对的,你说的很对,但是这样做必然导致了对象之间的耦合度增加了,既不方便测试,又不方便复用;IOC却很好的解决了这些问题,可以i很容易创建出一个松耦合的应用框架,同时更方便于测试。
常用的 IOC工具有 Autofac,castle windsor,unit,structMap等,本人使用过的只有 autofac,unit,还有自带的mef,,,也能算一个吧,还有现在的core的 DependencyInJection。
2.Core中的DI是啥?
依赖注入的有三种方式:属性,构造函数,接口注入;
在core之前,我们在.net framework中使用 autofac的时候,这三种方式我们可以随意使用的,比较方便(因为重点不是在这,所以不说core之前),但是有一点是,在web api和 web中属性注入稍微有点不同,自行扩展吧。
core中我们使用DI(dependency injection)的时候,属性注入好像还不支持,所以跳过这个,我们使用更多的是通过自定义接口使用构造函数注入。下面会有演示。
演示前我们先弄清楚 core中的这个 dependencyInJection到底是个啥,他是有啥构成的。这是git上提供的源码:https://github.com/aspnet/DependencyInjection,但是,,那么一大陀东西你肯定不想看,想走捷径吧,所以这里简要说一下,看图:
var moduleObjs = 通过4 中的方法获取到的程序集对象(Module); modules = moduleObjs .Select(m => (Module.Module)Activator.CreateInstance(m)) .OrderBy(m => m.Order); foreach (var m in modules) { services = m.RegisterModule(services); Console.WriteLine($"模块:【{m.GetType().Name}】注入完成"); } return services;View Code
如果运行项目的效果基本如下:
6.最后
偷懒了,篇幅有点长了,写多了耗费太多时间了,,
- .net core 2.0学习记录(三):内置IOC与DI的使用
- 来吧学学.Net Core之项目文件简介及配置文件与IOC的使用
- .Net Core简单使用Mvc内置的Ioc
- [.Net Core] 简单使用 Mvc 内置的 Ioc
- Spring 第二天:ioc,di的概念,使用接口配合dj来编程
- ASP.NET MVC中使用Spring.Net实现IOC和DI
- 使用.net core 自带DI框架实现 延迟加载
- DIP原则、IoC以及DI
- 这个框架里面会使用到依赖注入(DI)、IOC、反射、自动加载等等机制,如果你能自己写出来
- 使用.net core 自带DI框架实现 延迟加载
- 这个框架里面会使用到依赖注入(DI)、IOC、反射、自动加载等等机制,如果你能自己写出来
- 使用Spring框架入门二:基于注解+XML配置的IOC/DI的使用
- 控制反转(IOC)、依赖注入(DI)之使用List、Properties注入集合
- Spring.net 控制反转(IOC)依赖注入(DI)的使用 以及Config文件的配置
- 使用Spring.Net 1.3.2实现Container(IoC)(一)IoC、DI、Spring.NET、Ioc Container、 ClassicContainer
- 来吧学学.Net Core之项目文件简介及配置文件与IOC的使用
- [.Net Core] 简单使用 Mvc 内置的 Ioc(续)
- Spring 使用注解的方式实现IOC和DI(控制反转和依赖注入)
- 小叙Spring.NET(Ioc与DI)的使用步骤
- Mvc4中使用Spring.Net实现IOC和DI