学霸笔记:C#开发工程师之笔记篇4C#开发工程师

/ 集美大学经济学院C#开发工程师 / 2017-05-17

笔记篇,学霸笔记,C#开发工程师,Ninject,汇鱼网,.NET

在学习Ninject时,我们要想为什么要学习NInject呢。它有什么好处呢?那就让我们今天的笔记就学习一下Ninject。


最近在使用IoC进行一个较复杂的项目进行架构,在IoC的选择上让我很是纠结。首先我不喜欢大量的配置文件进行配置,那简直是噩梦,比学习一门编程语言还痛苦。我喜欢前一段时间看EF的CodeFirst的那种模式,一切尽在代码控制;其次要轻,框架里面的大多数功能我能用上多少呢?甚至于可能你永远都不会知道。尝试过自己实现了简单的IoC功能,也的确在很多项目用到了,但是对于自己的能力还是有所了解的,更希望还是能找到一个轻量,功能够用,易于使用的。查了很久,无意间,看到MVC4中有提到了这个框架:Ninject。留意,看了不少介绍,好象是我想要的。


下面的是我自己翻译的一些我自己觉得能让大家比较好的学习Ninject的理解


如果想让程序脱离耦合,就必须使用IoC容器来解决这个问题。Ninject就是这样一个容器。


Ninject不是第一个IoC容器,也一定不会是最后一个,那么Ninject的设计初衷是什么呢?



首先,其他框架过于依赖配置文件。这至少有下述的一些缺点:


配置更为复杂和冗长的;你需要提供assembly-qualified名称来进行定义,这很容易破坏你的应用程序而仅仅是因为一个简单的打字错误。相比之下,Ninject默认的做法是通过接口来进行类型绑定。


例如:你想将 ServiceImpl 的实现进行它所属的接口 IService


1.  Bind<IService>().To<ServiceImpl>();  


其次,许多其他的框架太过重量,这将意味着你的项目需要添加一些非常多的组件引用,或依赖于各种框架组件。对于较小的项目,这可能会导致膨胀Ninject旨在让事情简单明了。

第三,Ninject 推出一个概念的定义:上下文绑定(Contextual Binding)。它将不是基于字符串标识的绑定,Ninject可以运行期间灵活的进行条件化的绑定,例如:


1.  Bind<IService>().To<RedImpl>().WhenTargetHas<RedAttribute>();  

2.  Bind<IService>().To<BlueImpl>().WhenTargetHas<BlueAttribute>();  

3.  class ConsumerA   

4.  {  

5.      public ConsumerA([Red] IService service)  

6.      {  

7.          //因为加上了"Red"定制特性,通过方法注入"IService"的实现将是RedImpl  

8.      }  

9.  }  

10. class ConsumerB  

11. {  

12.     public ConsumerB([Blue] IService service)  

13.     {  

14.         //因为加上了"Blue"定制特性,通过方法注入"IService"的实现将是BlueImpl  

15.     }  

16. }  

Ninject 的重要特点:重量轻,高度模块化框架

有一些 Ninject 自已总结的特点,我认为很重要:


  1. 紧凑

  2. 高度一致

  3. 测试驱动开发,并且最大化的单元测试覆盖率

  4. 当说明文档看不明白时,大量的测试代码就是最好的例子


Ninject 支持 Silverlight, Mono, WP7.5,.NET 4.0, MVC3, 以及 WinRT的预览支持。

重要的还包括,Ninject 的扩展已经非常多了:

  • Ninject.Web.Common  :用于Web扩展和WCF的扩展。

  • Ninject.Web.Mvc       用于ASP.NET MVC

  • Ninject.Web  :用于ASP.NET WebForm

  • Ninject.Extensions.Wcf :支持WCF

  • Ninject.Extensions.Conventions 提供配置,用于修改Ninject的默认约定。

  • Ninject.Extensions.Factory:       用于自动创建工厂和实例对象。

  • Ninject.Extensions.Interception 用于拦截。

  • Ninject.Extensions.NamedScope      :允许绑定定义范围.

  • Ninject.Extensions.ContextPreservation:      用于上下文的保存。 经常和NameScope结合起来一起用。

  • Ninject.Extensions.ChildKernel:为Ninject提供内核定义。

  • Ninject.Extensions.DependencyCreation

  • Ninject.Web.Mvc.FluentValidation:用于MVC Fluent Api的验证。

  • Ninject.Extensions.Logging 日志记录。

  • Ninject.Extensions.bbvEventBroker

  • Ninject.Extensions.WeakEventMessageBroker

  • Ninject.Extensions.MessageBroker:消息代理。

  • Ninject.Extensions.Xml 基于XML的模块加载Ninject

  • Ninject.MockingKernel:       用于模拟。

  • Ninject.Extensions.WF:用于支持工作流。


今天的这个Ninject是否让你感触良多,是否觉得这个轻量级的框架十分好用。你觉得有用,我这笔记就没有白写。学霸笔记会有更多更好的笔记。希望能帮到大家。还有就是汇鱼网有许多的非常好的文章,大家可能找到自己想要的文章。



公众号,微信

汇鱼网海峡创乐汇
汇鱼网海峡创乐汇