博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Ninject学习笔记<四>
阅读量:5881 次
发布时间:2019-06-19

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

前言

前段时间看Mvc最佳实践时,认识了一个轻量级的IOC框架:Ninject。通过google搜索发现它是一个开源项目,最新源代码地址是:

用户向导:

建议新手请先看看Ninject的介绍:

我节选其中关于Ninject的好处,并翻译如下:

Ninject是一个快如闪电、超轻量级的基于.Net平台的依赖注入框架。它能够帮助你把应用程序分离成一个个松耦合、高内聚的模块,然后用一种灵活的方式组装起来。通过使用Ninject配套你的软件架构,那么代码将会变得更加容易编写、重用性强、易于测试和修改。

搜索博客园尚未找到关于Ninject的使用,因此本文发布一个示例作入门级教程。

 

Ninject入门级示例

像以前的IOC教程那样,拿日志记录做示例应该是非常直观的。

首先编写一个日志记录的接口:

public interface ILogger{    void Write(string message);}

 

以及FlatFileLogger, DatabaseLogger 来实现Logger的逻辑(只是为了演示Ninject的使用,所以具体逻辑是省略的,只是通过控制台告诉大家使用了那个Logger):

public class FlatFileLogger : ILogger{    public void Write(string message)    {        Console.WriteLine(String.Format("Message:{0}", message));        Console.WriteLine("Target:FlatFile");    }}public class DatabaseLogger : ILogger{    public void Write(string message)    {        Console.WriteLine(String.Format("Message:{0}", message));        Console.WriteLine("Target:Database");    }}

 

Ninject通过NinjectModule来配置依赖注入(不知道有没有文件配置,在官方教程里没找到相关资料),这里自定义自己的Module:

internal class MyModule : Ninject.Modules.NinjectModule{    public override void Load()    {        Bind
().To
(); Bind
().To
(); }}

 

具体调用方法:

private static IKernel kernel = new StandardKernel(new MyModule());static void Main(string[] args){    ILogger logger = kernel.Get
(); logger.Write("Bruce Say: Hello Ninject!"); Console.WriteLine("continues.."); Console.Read();}

 

通过 kernel.Get<ILogger>() 来获取ILogger的实例,之前在MyModule里先后对ILogger 绑定了FlatFileLogger和 DatabaseLogger,而kernel.Get<ILogger>() 这里返回第一个绑定的对象,即FlatFileLogger。

 

构造函数注入

这里新建一个ITester 和 IocTester, 而IocTester 依赖于ILogger:

interface ITester{    void Test();}class IocTester:ITester {    private ILogger _logger;    public IocTester(ILogger logger)    {        _logger = logger;    }    public void Test()    {        _logger.Write("Bruce Say: Hello Ninject!");    }}

 

下面看看Ninject是怎么配置的,很简单修改MyModule,绑定ITester:Bind<ITester>().To<IocTester>():

internal class MyModule : Ninject.Modules.NinjectModule{    public override void Load()    {        Bind
().To
(); Bind
().To
(); }}

 

从以上配置中,我们是看不到IocTester 和ILogger 是有依赖关系的,这就是依赖注入的好处。只是简单告诉哪个接口对应哪个类,剩下的任务就可以交给Ninject来处理了。

private static IKernel kernel = new StandardKernel(new MyModule());static void Main(string[] args){    ITester tester = kernel.Get
(); tester.Test(); Console.WriteLine("continues.."); Console.Read();}

 

另外Ninject 也支持属性、方法等注入,具体可以参考用户向导。

 

IOC的世界有句话是这样说的:Don't call me, I will call you.

 

相关资源

介绍Ninject 在ASP.NET MVC 的应用(英文)

 

另一篇关于微软的IOC框架Unity的介绍:

作者:()
本文版权归作者和博客园共有,出处:

转载地址:http://mhpix.baihongyu.com/

你可能感兴趣的文章
valgrind 的使用简介
查看>>
seajs和requirejs技术指导文档
查看>>
Vue后台管理系统用户认证封装
查看>>
swift - tableview 滚动到指定位置
查看>>
死亡的颂唱者 NOIP模拟 贪心 DFS
查看>>
PHPer面试指南-MySQL 篇
查看>>
1022: [SHOI2008]小约翰的游戏John
查看>>
上传服务端
查看>>
用两个队列实现栈
查看>>
独立思考者模型:避开思维误区的沼泽
查看>>
Entity Framework Code-First(6):Database Initialization
查看>>
程序员:一些该知道的英文缩写
查看>>
C# 访问 C DLL
查看>>
vue实现非路由跳转以及数据传递
查看>>
在未来发展有哪些编程语言比较友好
查看>>
ios 进入 等待时间
查看>>
1、ping
查看>>
web前台技术学习总结(1)-CSS实现全浏览器兼容的ellipsis
查看>>
webpack iconfont 字体图标
查看>>
js如何使得新打开的窗口居中
查看>>