博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【.NET】Ninject使用
阅读量:7280 次
发布时间:2019-06-30

本文共 2614 字,大约阅读时间需要 8 分钟。

  Ninject是一个IOC容器,用来解决程序中组件的耦合问题,它的目的在于做到最少配置。简单来讲就是 为我们选择一个想要的类来处理事务。

百度百科的解释:一个快如闪电、超轻量级的基于.Net平台的依赖注入框架。把应用程序分离成一个个松耦合、高内聚的模块,然后用一种灵活的方式组装起来。

一、Console项目使用

参考:

NuGet引入:Ninject

///         /// 1、简单的情况,实现类 没有依赖其他类        ///         public static  void Simple()        {            //一般的使用情况            Business bus = new Business(new LinqValueCalculator());            decimal result = bus.CalculatStockValue();            Console.WriteLine(result);             //使用Ninject。。LinqValueCalculator绑定接口            //1、创建一个Ninject内核对象            IKernel ninjectKernel = new StandardKernel();             //2、将想使用的类型和他的接口进行绑定,告诉Ninject,当接收到一个实现IValueCalculater的请求的时候,            //创建并返回LinqValueCalculator这个类,上面的两个关键字Bind,To可以帮助我们理解他的意思。            ninjectKernel.Bind
().To
(); //3、用Ninject的Get方法去获取IValueCalculator接口的实现 //Ninject将自动为我们创建LinqValueCalculator类的实例,并返回该实例的引用。 IValueCalculater calcImpl = ninjectKernel.Get
(); //4、创建Business实例并注入依赖(calcImpl) Business business = new Business(calcImpl); Console.WriteLine(business.CalculatStockValue()); }
View Code

代码:

对于单个简单的DI,用Ninject确实显得麻烦。但如果添加多个复杂点的依赖关系,使用Ninject则可大大提高编码的工作效率

当我们请求Ninject创建某个类型的实例时,它会检查这个类型和其它类型之间的耦合关系。如果存在依赖关系,那么Ninject会根据依赖处理理它们,并创建所有所需类的实例。

拓展:

using (var kernel = new StandardKernel(new BookingServiceNinjectModule(),new CacheNinjectModule()))            {                Client = kernel.Get
(); Redis = kernel.Get
(CacheTypeName.Redis); }

二、MVC中使用Ninject

代码:

参考:

  1、创建Controller Factory

在ASP.NET MVC中,一个客户端请求是在特定Controller的Action中进行处理的。

默认情况下,ASP.NET MVC使用内置的Controller工厂类 DefaultControllerFactory来创建某个请求对应的Controller实例。

有时候默认的Controller工厂不能满足我们实际的需求,我们就需要对这种默认行为进行扩展,即创建一个继承自DefaultControllerFactory类的自定义Controller工厂类(NinjectControllerFactory)并重写其中的一些方法。

  2、设置工厂

Controller工厂类创建好后,我们就需要告诉MVC用我们的NinjectControllerFactory类来创建Controller对象,为此,需在Global.asax文件的Application_Start方法中注册

  3、添加领域模型

准备数据

  4、添加接口,Repository

需要一种方式来从数据库中读取Book数据。

在这我们不防为数据的使用者(这里指Controller)提供一个IBookRepository接口,在这个接口中声明一个IQueryable<Book>类型的属性Books。

这样,通过该接口使用依赖注入,使用者就可以拿到Books数据集合,而不用关心数据是如何得到的。

为此,我们在BookShop.Domain工程中添加一个名为 Abstract的文件夹,在该文件夹中添加我们的IBookRepository接口文件,

  5、添加接口实现

添加一个名为Implement文件夹用于存放具体的类。添加一个实现了IBookRepository接口的BookRepository类来作为我们的Book数据仓储。

  6、添加绑定

private void AddBindings() {    ninjectKernel.Bind
().To
();}

  7、添加控制器

显示列表

  8、添加视图

显示数据

 

更多参考:

 

转载于:https://www.cnblogs.com/peterYong/p/10137987.html

你可能感兴趣的文章
C语言---递归反向输出任意长度的字符串
查看>>
SQL Server 优化器特性导致的内存授予相关BUG
查看>>
在wpf中如何让MediaElement的视频循环播放
查看>>
网格最短路径算法(Dijkstra & Fast Marching)(转)
查看>>
SQL Server 2008空间数据应用系列十二:Bing Maps中呈现GeoRSS订阅的空间数据
查看>>
php-fpm配置文件说明
查看>>
敏捷的軟體開發流程(CMMI)
查看>>
浅析SQL Server在可序列化隔离级别下,防止幻读的范围锁的锁定问题
查看>>
Redis Admin UI——一个Redis UI管理界面
查看>>
libcurl使用示例
查看>>
从JDK源码角度看java并发的原子性如何保证
查看>>
reactor线程阻塞引起故障
查看>>
中移动试水SaaS管理模式
查看>>
理解C语言——从小菜到大神的晋级之路(10)——结构体、联合体
查看>>
阿里云肖力:安全智能时代公有云更靠谱
查看>>
Docker Workflow(三):编排工具
查看>>
云栖大会Serverless场分享:日志处理挑战与展望
查看>>
大龄程序员的发展方向是做管理还是继续写程序
查看>>
PostgreSQL Oracle 兼容性之 - timestamp 与 numeric 的运算
查看>>
用了7年做到项目经理,女朋友却离开了我
查看>>