ninject学习笔记一:IOC的实现

这篇文章主要介绍ninject在IOC方面的实现,至于IOC的含义,网络资源很丰富,我这儿就不再赘述了。官方的文档其实挺好的,只是本人英语很烂,看起来比较费劲,下面这些东西是看官方的代码推敲的,我觉得应该能够说明一些问题,希望给和我一样的初学者有一些帮助吧。

这里用一个小案例开始,也就是官方案例的改版。

首先,你要创建项目,并且通过NuGet添加ninject程序集文件

install-package ninject

接着,创建一个武器接口IWeapon,常说攻击性武器,可见咱们这武器也有杀伤力,定义伤害的方法Hit()

public interface IWeapon{
   string Hit(String target);   
}

定义长剑Sword和绣花针Needle,在武侠世界里,高手飞花摘叶也可伤人,所以让它们实现武器接口IWeapon

public class Sword : IWeapon{

     public string Hit(string target){

           return "长剑伤害"+target;
     }
}


public class Needle : IWeapon{

     public string Hit(string target){

           return "绣花针伤害"+target;
     }
}

然后得有人使用武器打架才行(为什么非得打架呢),那么就来一个江湖中人吧,侠客类Warrior

    public class Warrior
    {
        public string Name { get; set; }

        private IWeapon iweapon;

        public Warrior(IWeapon iweapon){
            this.iweapon = iweapon;
        }

        public void Attack(string target) {
            Console.WriteLine(this.Name+iweapon.Hit(target));
        }
    }

给侠客定义了名字和行为,最后在主方法的测试,通过Warrior构造函数注入武器对象给jian或zhen

static void Main(string[] args)
{
            
       IWeapon jian = new Sword();
       IWeapon zhen = new Needle();
       Warrior w1 = new Warrior(jian);
       w1.Name = "令狐冲";

       Warrior w2 = new Warrior(zhen);
       w2.Name = "东方不败";

       w1.Attack(w2.Name);
       w2.Attack(w1.Name);
       Console.ReadLine();
}

运行结果如下:

从上面代码可以看出,要想得到一种武器,只需要去手动实例化一个就可以了,这是多态的一种体现。

(时间有点晚了,还没有写到依赖注入的实现,明天再续。。。)

 

posted @ 2014-08-16 00:00  Deep_Blue  阅读(335)  评论(0编辑  收藏  举报