最近学习MVC3过程中,接触到依赖注入的概念,随手写了一些简单的实例,帮助我更好的去理解这些概念。
1.构造器注入:
1>在命名空间DI中,先定义一个接口IHello:
View Code
2>然后定义两个实现该接口的方法ChineseHello和EnglishHello:
View Code
1 public class ChineseHello : IHello 2 { 3 public string SayHello() 4 { 5 return "你好,JChan"; 6 } 7 }
View Code
1 public class EnglishHello : IHello 2 { 3 public string SayHello() 4 { 5 return "Hello,JChan"; 6 } 7 }
3>接着定义一个People类,这个类定义一个Say()的方法,这个类的构造方法的参数没有具体指明是传入ChineseHello还是EnglishHello,这就具有相当的灵活性,当具体申明这个类时,才决定具体传入哪个类:
View Code
4>最后,在Main()方法中调用,代码如下:
View Code
运行显示结果如下:
2.利用Ninject插件注入:
1>在Ninject官网下载最新的插件,并在工程项目中引用
2>新建两个类MyModuleEnglish,MyModuleChinese,分别将IHello接口绑定到EnglishHello和ChineseHello上,代码如下:
View Code
1 public class MyModuleEnglish : NinjectModule 2 { 3 public override void Load() 4 { 5 Bind<IHello>().To<EnglishHello>(); 6 } 7 }
View Code
1 public class MyModuleEChinese : NinjectModule 2 { 3 public override void Load() 4 { 5 Bind<IHello>().To<ChineseHello>(); 6 } 7 }
3>最后修改Main()函数,代码如下:
View Code
1 class Program 2 { 3 static void Main(string[] args) 4 { 5 People p1 = new People(new EnglishHello()); 6 People p2 = new People(new ChineseHello()); 7 Console.WriteLine("使用构造函数进入依赖注入:"); 8 Console.WriteLine("使用英语打招呼:"); 9 p1.say(); 10 Console.WriteLine("使用中文打招呼:"); 11 p2.say(); 12 13 Console.WriteLine("######################################"); 14 Console.WriteLine("使用Nibject进入依赖注入:"); 15 IKernel kernel3 = new StandardKernel(new MyModuleEnglish()); 16 People p3 = kernel3.Get<People>(); 17 IKernel kernel4 = new StandardKernel(new MyModuleChinese()); 18 People p4 = kernel4.Get<People>(); 19 Console.WriteLine("使用英语打招呼:"); 20 p3.say(); 21 Console.WriteLine("使用中文打招呼:"); 22 p4.say(); 23 Console.ReadKey(); 24 } 25 26 }
4>最后运行程序