当前位置: 首页 > news >正文

使用IoC容器--Ninject

在这里插入图片描述

Ninject

Ninject是一个较新的开源的IoC容器。这是简单和可扩展的。你可以从下面的位置下载IoC容器。
Ninject
或者您可以使用 NuGet 向您的项目添加Ninject。让我们从NuGet向我们的项目中添加Ninject。只需转到您的项目引用并右键单击,然后 ManageNuGet Packages,然后搜索 Nintject。你会发现类似下面的内容:
在这里插入图片描述

在安装Ninject之后,你会在项目引用中找到Ninject。使用Ninject,你必须使用以下命名空间

using Ninject;

设置容器

Ninject容器使用一个名为kernel的类。 Ninject会自动注册所有的具体类型,你不需要注册它们。

注册依赖

var kernel = new StandardKernel();
kernel.Bind<IRepository>().To<Repository>();

当请求IRepository时,Repository将提供实现。

使用容器

解析依赖

//resolving dependencies
//Out from kernel
PurchaseBl purchaseBl = kernel.Get<PurchaseBl>();
Console.WriteLine(purchaseBl.SavePurchaseOrder());

输出:

I am saving data to Database.

如果我们改变绑定,那么:

var kernel = new StandardKernel();
kernel.Bind<IRepository>().To<TextRepository>();
PurchaseBl purchaseBl = kernel.Get<PurchaseBl>();
Console.WriteLine(purchaseBl.SavePurchaseOrder());

输出:

I am saving data to TextFile.

当我们需要对默认绑定执行某些操作时,重新绑定非常有用。假设在某些情况下,当新模块出现时,我们需要更改默认绑定。对于重新绑定,我们可以像下面这样使用Rebind方法:

kernel.Rebind<IRepository>().To<Repository>();

这些都是我们可以使用注入的简单方法。下面将介绍如何管理对象的生命周期。

使用Ninject实现对象生命周期管理

下面修改我们的TextRepository 类,以便我们能够理解我们的对象生命周期:

/// <summary>
/// Responsible for saving data to text file
/// </summary>
public class TextRepository : IRepository
{private int _counter = 0;public string Save(){_counter++;return string.Format("I am saving data to TextFile {0}.", _counter);}
}

创建两个PurchaseBl实例,如下所示:

var kernel = new StandardKernel();
kernel.Bind<IRepository>().To<TextRepository();//resolving dependencies
//Out from kernel
var purchaseBl = kernel.Get<PurchaseBl>();
Console.WriteLine(purchaseBl.SavePurchaseOrder());var purchaseBl2 = kernel.Get<PurchaseBl>();
Console.WriteLine(purchaseBl2.SavePurchaseOrder());

现在我们有了两个PurchaseOrderBl实例,分别是purchaseBl和purchaseBl2,因此输出是:

I am saving data to TextFile1.
I am saving data to TextFile1.

通过输出可以发现两个输出显示TextFile1,这意味着每次它创建新的实例。现在,如果我们想要创建TextRepository的单个实例,那么我们必须创建一个Singleton单例实例,这样同一个实例就可以通过purchaseBl和 purchaseBl2共享。

kernel.Bind<IRepository>().To<TextRepository>().InSingletonScope();

输出:

I am saving data to TextFile1.
I am saving data to TextFile2.

现在第一个返回TextFile1,然后第二个返回TextFile2,这意味着 TextRepository的一个实例被两者共享。我们可以在许多作用域中创建对象,比如事务作用域、线程作用域、单例作用域等等。这些是我们如何在项目中使用Ninjet的基础知识。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【Unity】子物体旋转变形的解决方法
  • Windows上MSYS2的安装和使用
  • 认知杂谈30
  • uni-app 获取当前位置的经纬度以及地址信息
  • 投保单号和保单号码
  • GeoScene Pro教程(005):GeoScenePro移动地理数据库
  • Open3D mesh 模型精细化处理--中点剖分
  • 期权权利金要多少?期权保证金和权利金有什么区别?
  • Soul Machines——AI生成虚拟主播或虚拟人,模拟真人交互
  • 算法day18|235. 二叉搜索树的最近公共祖先、701.二叉搜索树中的插入操作、450.删除二叉搜索树中的节点
  • SpringBoot 数据访问-jpa
  • 旋转编码器模块(软件消抖)
  • LVGL | VisualStuio PC模拟器
  • 【机器学习】集成学习------迅速了解什么是集成学习!!!
  • 子组件和父组件的挂载顺序
  • 08.Android之View事件问题
  • CSS3 聊天气泡框以及 inherit、currentColor 关键字
  • jquery cookie
  • JS进阶 - JS 、JS-Web-API与DOM、BOM
  • Linux下的乱码问题
  • nodejs:开发并发布一个nodejs包
  • PermissionScope Swift4 兼容问题
  • SpringBoot几种定时任务的实现方式
  • 基于 Ueditor 的现代化编辑器 Neditor 1.5.4 发布
  • 说说动画卡顿的解决方案
  • 我这样减少了26.5M Java内存!
  • 携程小程序初体验
  • 写给高年级小学生看的《Bash 指南》
  • 学习HTTP相关知识笔记
  • 学习使用ExpressJS 4.0中的新Router
  • 用jquery写贪吃蛇
  • 优化 Vue 项目编译文件大小
  • ​【C语言】长篇详解,字符系列篇3-----strstr,strtok,strerror字符串函数的使用【图文详解​】
  • ​软考-高级-系统架构设计师教程(清华第2版)【第20章 系统架构设计师论文写作要点(P717~728)-思维导图】​
  • # Swust 12th acm 邀请赛# [ E ] 01 String [题解]
  • #ifdef 的技巧用法
  • #宝哥教你#查看jquery绑定的事件函数
  • #如何使用 Qt 5.6 在 Android 上启用 NFC
  • (02)Hive SQL编译成MapReduce任务的过程
  • (Redis使用系列) Springboot 在redis中使用BloomFilter布隆过滤器机制 六
  • (阿里云万网)-域名注册购买实名流程
  • (编程语言界的丐帮 C#).NET MD5 HASH 哈希 加密 与JAVA 互通
  • (二)pulsar安装在独立的docker中,python测试
  • (附源码)springboot宠物医疗服务网站 毕业设计688413
  • (六) ES6 新特性 —— 迭代器(iterator)
  • (每日持续更新)jdk api之StringBufferInputStream基础、应用、实战
  • (转)c++ std::pair 与 std::make
  • (转载)在C#用WM_COPYDATA消息来实现两个进程之间传递数据
  • .Net中的设计模式——Factory Method模式
  • @ohos.systemParameterEnhance系统参数接口调用:控制设备硬件(执行shell命令方式)
  • []AT 指令 收发短信和GPRS上网 SIM508/548
  • [2013AAA]On a fractional nonlinear hyperbolic equation arising from relative theory
  • [AIGC] Redis基础命令集详细介绍
  • [Asp.net MVC]Bundle合并,压缩js、css文件
  • [CF543A]/[CF544C]Writing Code