您的位置:首页 > 其它

.Net Core 中的 DI使用 - IOC原则

2018-11-02 14:55 716 查看

概要:因为不知道写啥,所以随便找个东西乱说几句,嗯,就这样,就是这个目的。

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.最后

  偷懒了,篇幅有点长了,写多了耗费太多时间了,,

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: