标签:
昨天读asp.net5的doc,看到了configure的配置时,提到在controller中访问配置就是通过依赖注入的。asp.net5的很多功能都通过依赖注入来实现了,可以看一下startup.cs中,有多少给出的是接口吧!这个概念我也知道很久了,如何实现一直未搞清,而且在.net环境下,也有几个成熟的方案,但因为不是.net框架的一部分,所以我从未上手使用过,对这一块一直是模模糊糊。即然想用asp.net5作为自己下一步的开发环境,还是啃一下子吧!
就概念上说,依赖注入就是解决强耦合问题的。以前写代码用到 .net的框架以及第三方库,都是提供好一个个的类,然后我们就是实例化这个类,调用它的各个方法来写程序。这样有问题吗?没问题,我喜欢。 但有人却不喜欢,非要“注入”一下。于是“接口” 、构造函数注入 、属性注入就产生了。
先看一下如何基于asp.net5的依赖注入写代码吧,其它框架的注入应该还有不同的,就不管它了。
首先在startup.cs中,
public void ConfigureServices(IServiceCollection services) { //根据asp.net的文档,这样添加一个单件对象。整个项目可以用。 services.AddSingleton(_ => Configuration); }
services 从哪儿来,是运行时传入的,
Configureation从哪儿来,它是(new ConfigurationBuilder( ) ).build()出的一个对象。包含项目的配置信息,比如author,conntectstring等,这样我们从其它地方可以访问。
我们转到controller中,增加下面的代码就算注入成功了。我们随时可以用_config来访问配置信息。
private readonly IConfiguration _config; public HomeController(IConfiguration config) { _config = config; }
此时本应该去asp.net5的官方文档查一下,但上面到目前为止,依赖注入的章节标记为未完成,就是说还没人写出来。
然后去github找到https://github.com/aspnet/DependencyInjection, 上面写着这个包的用途是:
“Contains the common DI abstractions that ASP.NET 5 and EF 7 use, as well as adapters for some IoC containers”。
先下载下来源码吧!复制项目地址,然后到vs2015中,克隆一下。
先回到asp.net5的项目模版中,看一下这两个提示
的确,IServiceCollection的命名空间是依赖注入的名字,而AddSingleton的方法只是那个接口的一个扩展。
在AddSingleton方法上点右键,查看元信息。一切信息都对。
至此解决我了一个大疑惑:我一直以为IServiceCollection是asp.net5提供的许多服务呢,比如ef,mvc,route等服务。
如果想用MVC,则在服务中添加一下就行。谁他妈的能想到,这个service的意思是注入服务的。而且这个接口就是用来注入的。
这是克隆下来的源码,包含3个项目,可以在里面找一下上面的这些接口以及类,都可以找到。
由此更加可知,IServiceCollection就是依赖注入的一个接口。
待我细细读一下源码,再继续分析吧!
标签:
原文地址:http://my.oschina.net/u/1540190/blog/490715