Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
ÉîÈëÀí½âDIP¡¢IoC¡¢DIÒÔ¼°IoCÈÝÆ÷
 
×÷Õß Áõ𩣬»ðÁú¹ûÈí¼þ    ·¢²¼ÓÚ 2014-09-02
  4688  次浏览      27
 

ÕªÒª

ÃæÏò¶ÔÏóÉè¼Æ£¨OOD£©ÓÐÖúÓÚÎÒÃÇ¿ª·¢³ö¸ßÐÔÄÜ¡¢Ò×À©Õ¹ÒÔ¼°Ò׸´ÓõijÌÐò¡£ÆäÖУ¬OODÓÐÒ»¸öÖØÒªµÄ˼ÏëÄǾÍÊÇÒÀÀµµ¹ÖÃÔ­Ôò£¨DIP£©£¬²¢ÓÉ´ËÒýÉê³öIoC¡¢DIÒÔ¼°IocÈÝÆ÷µÈ¸ÅÄͨ¹ý±¾ÎÄÎÒÃǽ«Ò»ÆðѧϰÕâЩ¸ÅÄ²¢ÀíÇåËûÃÇÖ®¼ä΢ÃîµÄ¹ØÏµ¡£

ǰÑÔ

¶ÔÓڴ󲿷ÖС²ËÀ´Ëµ£¬µ±Ìýµ½´óÅ£ÃǸß̸DIP¡¢IoC¡¢DIÒÔ¼°IoCÈÝÆ÷µÈÃû´Êʱ£¬ÓÐûÓÐ˲¼äʯ»¯µÄ¸Ð¾õ£¿Æäʵ£¬ÕâЩ¡°¸ß´óÉÏ¡±µÄÃû´Ê£¬Àí½âÆðÀ´Ò²²¢²»ÊÇÄÇôµÄÄÑ£¬¹Ø¼üÔÚÓÚÈëÃÅ¡£Ö»ÒªÎÒÃÇÈëÃÅÁË£¬È»ºóÑ­Ðò½¥½ø£¬¼ÙÒÔʱÈÕ£¬×ÔȻˮµ½Çþ³É¡£

ºÃ°É£¬ÎÒÃÇÏȳõÂÔÁ˽âÒ»ÏÂÕâЩ¸ÅÄî¡£

ÒÀÀµµ¹ÖÃÔ­Ôò£¨DIP£©£ºÒ»ÖÖÈí¼þ¼Ü¹¹Éè¼ÆµÄÔ­Ôò£¨³éÏó¸ÅÄ¡£

¿ØÖÆ·´×ª£¨IoC£©£ºÒ»ÖÖ·´×ªÁ÷¡¢ÒÀÀµºÍ½Ó¿ÚµÄ·½Ê½£¨DIPµÄ¾ßÌåʵÏÖ·½Ê½£©¡£

ÒÀÀµ×¢È루DI£©£ºIoCµÄÒ»ÖÖʵÏÖ·½Ê½£¬ÓÃÀ´·´×ªÒÀÀµ£¨IoCµÄ¾ßÌåʵÏÖ·½Ê½£©¡£

IoCÈÝÆ÷£ºÒÀÀµ×¢ÈëµÄ¿ò¼Ü£¬ÓÃÀ´Ó³ÉäÒÀÀµ£¬¹ÜÀí¶ÔÏó´´½¨ºÍÉú´æÖÜÆÚ£¨DI¿ò¼Ü£©¡£

Ŷ£¡Ò²ÐíÄãÕýΪÕâЩİÉúµÄ¸ÅÄî¶øÉË͸ÄԽ²»¹ýû¹ØÏµ£¬½ÓÏÂÀ´ÎÒ½«ÎªÄãÒ»Ò»µÀÆÆÕâÆäÖеÄÐþ»ú¡£

ÒÀÀµµ¹ÖÃÔ­Ôò£¨DIP£©

ÔÚ½²¸ÅÄî֮ǰ£¬ÎÒÃÇÏÈ¿´Éú»îÖеÄÒ»¸öÀý×Ó¡£

ͼ1 ATMÓëÒøÐп¨

ÏàÐŴ󲿷ÖÈ¡¹ýÇ®µÄÅóÓѶ¼ÉîÓид¥£¬Ö»ÒªÓÐÒ»ÕÅ¿¨£¬Ëæ±ãµ½ÄÄÒ»¼ÒÒøÐеÄATM¶¼ÄÜȡǮ¡£ÔÚÕâ¸ö³¡¾°ÖУ¬ATMÏ൱Óڸ߲ãÄ£¿é£¬¶øÒøÐп¨Ï൱ÓڵͲãÄ£¿é¡£ATM¶¨ÒåÁËÒ»¸ö²å¿Ú£¨½Ó¿Ú£©£¬¹©ËùÓеÄÒøÐп¨²åÈëʹÓá£Ò²¾ÍÊÇ˵£¬ATM²»ÒÀÀµÓÚ¾ßÌåµÄÄÄÖÖÒøÐп¨¡£ËüÖ»Ð趨ÒåºÃÒøÐп¨µÄ¹æ¸ñ²ÎÊý£¨½Ó¿Ú£©£¬ËùÓÐʵÏÖÁËÕâÖÖ¹æ¸ñ²ÎÊýµÄÒøÐп¨¶¼ÄÜÔÚATMÉÏʹÓá£ÏÖʵÉú»îÈç´Ë£¬Èí¼þ¿ª·¢¸üÊÇÈç´Ë¡£ÒÀÀµµ¹ÖÃÔ­Ôò£¬Ëüת»»ÁËÒÀÀµ£¬¸ß²ãÄ£¿é²»ÒÀÀµÓڵͲãÄ£¿éµÄʵÏÖ£¬¶øµÍ²ãÄ£¿éÒÀÀµÓڸ߲ãÄ£¿é¶¨ÒåµÄ½Ó¿Ú¡£Í¨Ë׵Ľ²£¬¾ÍÊǸ߲ãÄ£¿é¶¨Òå½Ó¿Ú£¬µÍ²ãÄ£¿é¸ºÔðʵÏÖ¡£

Bob Martins¶ÔDIPµÄ¶¨Ò壺

¸ß²ãÄ£¿é²»Ó¦ÒÀÀµÓڵͲãÄ£¿é£¬Á½ÕßÓ¦¸ÃÒÀÀµÓÚ³éÏó¡£

³éÏó²»²»Ó¦¸ÃÒÀÀµÓÚʵÏÖ£¬ÊµÏÖÓ¦¸ÃÒÀÀµÓÚ³éÏó¡£

Èç¹ûÉú»îÖеÄʵÀý²»×ãÒÔ˵Ã÷ÒÀÀµµ¹ÖÃÔ­ÔòµÄÖØÒªÐÔ£¬ÄÇÏÂÃæÎÒÃǽ«Í¨¹ýÈí¼þ¿ª·¢µÄ³¡¾°À´Àí½âΪʲôҪʹÓÃÒÀÀµµ¹ÖÃÔ­Ôò¡£

³¡¾°Ò» ÒÀÀµÎÞµ¹Ö㨵ͲãÄ£¿é¶¨Òå½Ó¿Ú£¬¸ß²ãÄ£¿é¸ºÔðʵÏÖ£©

´ÓÉÏͼÖУ¬ÎÒÃÇ·¢Ïָ߲ãÄ£¿éµÄÀàÒÀÀµÓڵͲãÄ£¿éµÄ½Ó¿Ú¡£Òò´Ë£¬µÍ²ãÄ£¿éÐèÒª¿¼Âǵ½ËùÓеĽӿڡ£Èç¹ûÓÐеĵͲãÄ£¿éÀà³öÏÖʱ£¬¸ß²ãÄ£¿éÐèÒªÐ޸ĴúÂ룬À´ÊµÏÖеĵͲãÄ£¿éµÄ½Ó¿Ú¡£ÕâÑù£¬¾ÍÆÆ»µÁË¿ª·Å·â±ÕÔ­Ôò¡£

³¡¾°¶þ ÒÀÀµµ¹Ö㨸߲ãÄ£¿é¶¨Òå½Ó¿Ú£¬µÍ²ãÄ£¿é¸ºÔðʵÏÖ£©

ÔÚÕâ¸öͼÖУ¬ÎÒÃÇ·¢Ïָ߲ãÄ£¿é¶¨ÒåÁ˽ӿڣ¬½«²»ÔÙÖ±½ÓÒÀÀµÓڵͲãÄ£¿é£¬µÍ²ãÄ£¿é¸ºÔðʵÏָ߲ãÄ£¿é¶¨ÒåµÄ½Ó¿Ú¡£ÕâÑù£¬µ±ÓÐеĵͲãÄ£¿éʵÏÖʱ£¬²»ÐèÒªÐ޸ĸ߲ãÄ£¿éµÄ´úÂë¡£

ÓÉ´Ë£¬ÎÒÃÇ¿ÉÒÔ×ܽá³öʹÓÃDIPµÄÓŵ㣺

ϵͳ¸üÈáÈÍ£º¿ÉÒÔÐÞ¸ÄÒ»²¿·Ö´úÂë¶ø²»Ó°ÏìÆäËûÄ£¿é¡£

ϵͳ¸ü½¡×³£º¿ÉÒÔÐÞ¸ÄÒ»²¿·Ö´úÂë¶ø²»»áÈÃϵͳ±ÀÀ£¡£

ϵͳ¸ü¸ßЧ£º×é¼þËÉñîºÏ£¬Çҿɸ´Óã¬Ìá¸ß¿ª·¢Ð§ÂÊ¡£

¿ØÖÆ·´×ª£¨IoC£©

DIPÊÇÒ»ÖÖ Èí¼þÉè¼ÆÔ­Ôò£¬Ëü½ö½ö¸æËßÄãÁ½¸öÄ£¿éÖ®¼äÓ¦¸ÃÈçºÎÒÀÀµ£¬µ«ÊÇËü²¢Ã»ÓиæËßÈçºÎ×ö¡£IoCÔòÊÇÒ»ÖÖ Èí¼þÉè¼ÆÄ£Ê½£¬Ëü¸æËßÄãÓ¦¸ÃÈçºÎ×ö£¬À´½â³ýÏ໥ÒÀÀµÄ£¿éµÄñîºÏ¡£¿ØÖÆ·´×ª£¨IoC£©£¬ËüΪÏ໥ÒÀÀµµÄ×é¼þÌṩ³éÏ󣬽«ÒÀÀµ£¨µÍ²ãÄ£¿é£©¶ÔÏóµÄ»ñµÃ½»¸øµÚÈý·½£¨ÏµÍ³£©À´¿ØÖÆ£¬¼´ÒÀÀµ¶ÔÏó²»ÔÚ±»ÒÀÀµÄ£¿éµÄÀàÖÐÖ±½Óͨ¹ýnewÀ´»ñÈ¡¡£ÔÚͼ1µÄÀý×ÓÎÒÃÇ¿ÉÒÔ¿´µ½£¬ATMËü×ÔÉí²¢Ã»ÓвåÈë¾ßÌåµÄÒøÐп¨£¨¹¤Ðп¨¡¢Å©Ðп¨µÈµÈ£©£¬¶øÊǽ«²å¿¨¹¤×÷½»¸øÈËÀ´¿ØÖÆ£¬¼´ÎÒÃÇÀ´¾ö¶¨½«²åÈëʲôÑùµÄÒøÐп¨À´È¡Ç®¡£Í¬ÑùÎÒÃÇҲͨ¹ýÈí¼þ¿ª·¢¹ý³ÌÖг¡¾°À´¼ÓÉîÀí½â¡£

Èí¼þÉè¼ÆÔ­Ôò£ºÔ­ÔòΪÎÒÃÇÌṩָÄÏ£¬Ëü¸æËßÎÒÃÇʲôÊǶԵģ¬Ê²Ã´ÊÇ´íµÄ¡£Ëü²»»á¸æËßÎÒÃÇÈçºÎ½â¾öÎÊÌâ¡£Ëü½ö½ö¸ø³öһЩ׼Ôò£¬ÒÔ±ãÎÒÃÇ¿ÉÒÔÉè¼ÆºÃµÄÈí¼þ£¬±ÜÃâ²»Á¼µÄÉè¼Æ¡£Ò»Ð©³£¼ûµÄÔ­Ôò£¬±ÈÈçDRY¡¢OCP¡¢DIPµÈ¡£

Èí¼þÉè¼ÆÄ£Ê½£ºÄ£Ê½ÊÇÔÚÈí¼þ¿ª·¢¹ý³ÌÖÐ×ܽáµÃ³öµÄһЩ¿ÉÖØÓõĽâ¾ö·½°¸£¬ËüÄܽâ¾öһЩʵ¼ÊµÄÎÊÌ⡣һЩ³£¼ûµÄģʽ£¬±ÈÈ繤³§Ä£Ê½¡¢µ¥ÀýģʽµÈµÈ¡£

×ö¹ýµçÉÌÍøÕ¾µÄÅóÓѶ¼»áÃæÁÙÕâÑùÒ»¸öÎÊÌ⣺¶©µ¥Èë¿â¡£¼ÙÉèϵͳÉè¼Æ³õÆÚ£¬ÓõÄÊÇSQL ServerÊý¾Ý¿â¡£Í¨³£ÎÒÃǻᶨÒåÒ»¸öSqlServerDalÀ࣬ÓÃÓÚÊý¾Ý¿âµÄ¶Áд¡£

public class SqlServerDal

{

     public void Add()

    {

        Console.WriteLine("ÔÚÊý¾Ý¿âÖÐÌí¼ÓÒ»Ìõ¶©µ¥!");

    }

}

È»ºóÎÒÃǶ¨ÒåÒ»¸öOrderÀ࣬¸ºÔð¶©µ¥µÄÂß¼­´¦Àí¡£ÓÉÓÚ¶©µ¥ÒªÈë¿â£¬ÐèÒªÒÀÀµÓÚÊý¾Ý¿âµÄ²Ù×÷¡£Òò´ËÔÚOrderÀàÖУ¬ÎÒÃÇÐèÒª¶¨ÒåSqlServerDalÀàµÄ±äÁ¿²¢³õʼ»¯¡£

public class Order

{

        private readonly SqlServerDal dal = new SqlServerDal();//Ìí¼ÓÒ»¸ö˽ÓбäÁ¿±£´æÊý¾Ý¿â²Ù×÷µÄ¶ÔÏó

 

         public void Add()

       {

           dal.Add();

       }

}

×îºó£¬ÎÒÃÇдһ¸ö¿ØÖÆÌ¨³ÌÐòÀ´¼ìÑé³É¹û¡£

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

 

namespace DIPTest

{

    class Program

    {

        static void Main(string[] args)

        {

            Order order = new Order();

            order.Add();

 

            Console.Read();

        }

    }

}

Êä³ö½á¹û£º

OK£¬½á¹û¿´ÆðÀ´Í¦²»´íµÄ£¡Õýµ±ÄãÕ´Õ´×ÔϲµÄʱºò£¬ÕâʱBOSS¹ýÀ´ÁË¡£¡°Ð¡Áõ°¡£¬¸Õ¿Í»§ÄDZߴòµç»°¹ýÀ´ËµÊý¾Ý¿âÒª¸Ä³ÉAccess¡±£¬¡°¶ÔÄãÀ´Ëµ£¬Ó¦µ±Ð¡CASEÀ²£¡¡±BOSSÓÖ²¹³äµÀ¡£´ø×Å×ÔºÀ¶øÓÖ¾À½áµÄÇéÐ÷£¬ÎÒÃÇ˼¿¼×ÅÐ޸ĴúÂëµÄ˼·¡£

ÓÉÓÚ»»³ÉÁËAccessÊý¾Ý¿â£¬SqlServerDalÀà¿Ï¶¨Óò»ÁËÁË¡£Òò´Ë£¬ÎÒÃÇÐèҪж¨ÒåÒ»¸öAccessDalÀ࣬¸ºÔðAccessÊý¾Ý¿âµÄ²Ù×÷¡£

public class AccessDal

{

    public void Add()

   {

       Console.WriteLine("ÔÚACCESSÊý¾Ý¿âÖÐÌí¼ÓÒ»Ìõ¼Ç¼£¡");

   }

}

È»ºó£¬ÔÙ¿´OrderÀàÖеĴúÂë¡£ÓÉÓÚ£¬OrderÀàÖÐÖ±½ÓÒýÓÃÁËSqlServerDalÀàµÄ¶ÔÏó¡£ËùÒÔ»¹ÐèÒªÐÞ¸ÄÒýÓ㬻»³ÉAccessDal¶ÔÏó¡£

public class Order

{

        private readonly AccessDal dal = new AccessDal();//Ìí¼ÓÒ»¸ö˽ÓбäÁ¿±£´æÊý¾Ý¿â²Ù×÷µÄ¶ÔÏó

 

         public void Add()

       {

           dal.Add();

       }

}

Êä³ö½á¹û£º

·ÑÁ˾ÅÅ£¶þ»¢Ö®Á¦£¬³ÌÐòÖÕÓÚÅÜÆðÀ´ÁË£¡ÊÔÏëһϣ¬Èç¹ûÏ´οͻ§Òª»»³ÉMySqlÊý¾Ý¿â£¬ÄÇÎÒÃÇÊDz»ÊÇ»¹µÃÖØÐÂÐ޸ĴúÂ룿

ÏÔÈ»£¬Õâ²»ÊÇÒ»¸öÁ¼ºÃµÄÉè¼Æ£¬×é¼þÖ®¼ä¸ß¶ÈñîºÏ£¬¿ÉÀ©Õ¹ÐԽϲËüÎ¥±³ÁËDIPÔ­Ôò¡£¸ß²ãÄ£¿éOrderÀ಻Ӧ¸ÃÒÀÀµÓڵͲãÄ£¿éSqlServerDal£¬AccessDal£¬Á½ÕßÓ¦¸ÃÒÀÀµÓÚ³éÏó¡£ÄÇôÎÒÃÇÊÇ·ñ¿ÉÒÔͨ¹ýIoCÀ´ÓÅ»¯´úÂëÄØ£¿´ð°¸Êǿ϶¨µÄ¡£IoCÓÐ2ÖÖ³£¼ûµÄʵÏÖ·½Ê½£ºÒÀÀµ×¢ÈëºÍ·þÎñ¶¨Î»¡£ÆäÖУ¬ÒÀÀµ×¢ÈëʹÓÃ×îΪ¹ã·º¡£ÏÂÃæÎÒÃǽ«ÉîÈëÀí½âÒÀÀµ×¢È루DI£©£¬²¢Ñ§»áʹÓá£

ÒÀÀµ×¢È루DI£©

¿ØÖÆ·´×ª£¨IoC£©Ò»ÖÖÖØÒªµÄ·½Ê½£¬¾ÍÊǽ«ÒÀÀµ¶ÔÏóµÄ´´½¨ºÍ°ó¶¨×ªÒƵ½±»ÒÀÀµ¶ÔÏóÀàµÄÍⲿÀ´ÊµÏÖ¡£ÔÚÉÏÊöµÄʵÀýÖУ¬OrderÀàËùÒÀÀµµÄ¶ÔÏóSqlServerDalµÄ´´½¨ºÍ°ó¶¨ÊÇÔÚOrderÀàÄÚ²¿½øÐеġ£ÊÂʵ֤Ã÷£¬ÕâÖÖ·½·¨²¢²»¿ÉÈ¡¡£¼ÈÈ»£¬²»ÄÜÔÚOrderÀàÄÚ²¿Ö±½Ó°ó¶¨ÒÀÀµ¹ØÏµ£¬ÄÇôÈçºÎ½«SqlServerDal¶ÔÏóµÄÒýÓô«µÝ¸øOrderÀàʹÓÃÄØ£¿

ÒÀÀµ×¢È루DI£©£¬ËüÌṩһÖÖ»úÖÆ£¬½«ÐèÒªÒÀÀµ£¨µÍ²ãÄ£¿é£©¶ÔÏóµÄÒýÓô«µÝ¸ø±»ÒÀÀµ£¨¸ß²ãÄ£¿é£©¶ÔÏó¡£Í¨¹ýDI£¬ÎÒÃÇ¿ÉÒÔÔÚOrderÀàµÄÍⲿ½«SqlServerDal¶ÔÏóµÄÒýÓô«µÝ¸øOrderÀà¶ÔÏó¡£ÄÇô¾ßÌåÊÇÈçºÎʵÏÖÄØ£¿

·½·¨Ò» ¹¹Ô캯Êý×¢Èë

¹¹Ô캯Êýº¯Êý×¢È룬ºÁÎÞÒÉÎÊͨ¹ý¹¹Ô캯Êý´«µÝÒÀÀµ¡£Òò´Ë£¬¹¹Ô캯ÊýµÄ²ÎÊý±ØÈ»ÓÃÀ´½ÓÊÕÒ»¸öÒÀÀµ¶ÔÏó¡£ÄÇô²ÎÊýµÄÀàÐÍÊÇÊ²Ã´ÄØ£¿¾ßÌåÒÀÀµ¶ÔÏóµÄÀàÐÍ£¿»¹ÊÇÒ»¸ö³éÏóÀàÐÍ£¿¸ù¾ÝDIPÔ­Ôò£¬ÎÒÃÇÖªµÀ¸ß²ãÄ£¿é²»Ó¦¸ÃÒÀÀµÓڵͲãÄ£¿é£¬Á½ÕßÓ¦¸ÃÒÀÀµÓÚ³éÏó¡£ÄÇô¹¹Ô캯ÊýµÄ²ÎÊýÓ¦¸ÃÊÇÒ»¸ö³éÏóÀàÐÍ¡£ÎÒÃÇÔٻص½ÉÏÃæÄǸöÎÊÌ⣬ÈçºÎ½«SqlServerDal¶ÔÏóµÄÒýÓô«µÝ¸øOrderÀàʹÓÃÄØ£¿

Ê×Ñ¡£¬ÎÒÃÇÐèÒª¶¨ÒåSqlServerDalµÄ³éÏóÀàÐÍIDataAccess£¬²¢ÔÚIDataAccess½Ó¿ÚÖÐÉùÃ÷Ò»¸öAdd·½·¨¡£

public interface IDataAccess

{

        void Add();

}

È»ºóÔÚSqlServerDalÀàÖУ¬ÊµÏÖIDataAccess½Ó¿Ú¡£

public class SqlServerDal:IDataAccess

{

       public void Add()

       {

           Console.WriteLine("ÔÚÊý¾Ý¿âÖÐÌí¼ÓÒ»Ìõ¶©µ¥£¡");

       }

}

½ÓÏÂÀ´£¬ÎÒÃÇ»¹ÐèÒªÐÞ¸ÄOrderÀà¡£

 public class Order

  {

        private IDataAccess _ida;//¶¨ÒåÒ»¸ö˽ÓбäÁ¿±£´æ³éÏó

 

        //¹¹Ô캯Êý×¢Èë

        public Order(IDataAccess ida)

        {

            _ida = ida;//´«µÝÒÀÀµ

      }

 

        public void Add()

        {

            _ida.Add();

        }

}

OK£¬ÎÒÃÇÔÙÀ´±àдһ¸ö¿ØÖÆÌ¨³ÌÐò¡£

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

 

namespace DIPTest

{

    class Program

    {

        static void Main(string[] args)

        {

            SqlServerDal dal = new SqlServerDal();//ÔÚÍⲿ´´½¨ÒÀÀµ¶ÔÏó

            Order order = new Order(dal);//ͨ¹ý¹¹Ô캯Êý×¢ÈëÒÀÀµ

 

            order.Add();

 

            Console.Read();

        }

    }

}

Êä³ö½á¹û£º

´ÓÉÏÃæÎÒÃÇ¿ÉÒÔ¿´³ö£¬ÎÒÃǽ«ÒÀÀµ¶ÔÏóSqlServerDal¶ÔÏóµÄ´´½¨ºÍ°ó¶¨×ªÒƵ½OrderÀàÍⲿÀ´ÊµÏÖ£¬ÕâÑù¾Í½â³ýÁËSqlServerDalºÍOrderÀàµÄñîºÏ¹ØÏµ¡£µ±ÎÒÃÇÊý¾Ý¿â»»³ÉAccessÊý¾Ý¿âʱ£¬Ö»Ð趨ÒåÒ»¸öAccessDalÀ࣬ȻºóÍâ²¿ÖØÐ°ó¶¨ÒÀÀµ£¬²»ÐèÒªÐÞ¸ÄOrderÀàÄÚ²¿´úÂ룬Ôò¿ÉʵÏÖAccessÊý¾Ý¿âµÄ²Ù×÷¡£

¶¨ÒåAccessDalÀࣺ

public class AccessDal:IDataAccess

{

        public void Add()

        {

            Console.WriteLine("ÔÚACCESSÊý¾Ý¿âÖÐÌí¼ÓÒ»Ìõ¼Ç¼£¡");

        }

}

È»ºóÔÚ¿ØÖÆÌ¨³ÌÐòÖÐÖØÐ°ó¶¨ÒÀÀµ¹ØÏµ£º

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

 

namespace DIPTest

{

    class Program

    {

        static void Main(string[] args)

        {

             AccessDal dal = new AccessDal();//ÔÚÍⲿ´´½¨ÒÀÀµ¶ÔÏó

               Order order = new Order(dal);//ͨ¹ý¹¹Ô캯Êý×¢ÈëÒÀÀµ

 

               order.Add();

 

            Console.Read();

        }

    }

}

Êä³ö½á¹û£º

ÏÔÈ»£¬ÎÒÃDz»ÐèÒªÐÞ¸ÄOrderÀàµÄ´úÂ룬¾ÍÍê³ÉÁËAccessÊý¾Ý¿âµÄÒÆÖ²£¬ÕâÎÞÒÉÌåÏÖÁËIoCµÄ¾«Ãî¡£

·½·¨¶þ ÊôÐÔ×¢Èë

¹ËÃû˼Ò壬ÊôÐÔ×¢ÈëÊÇͨ¹ýÊôÐÔÀ´´«µÝÒÀÀµ¡£Òò´Ë£¬ÎÒÃÇÊ×ÏÈÐèÒªÔÚÒÀÀµÀàOrderÖж¨ÒåÒ»¸öÊôÐÔ£º

public class Order

{

      private IDataAccess _ida;//¶¨ÒåÒ»¸ö˽ÓбäÁ¿±£´æ³éÏó

      

        //ÊôÐÔ£¬½ÓÊÜÒÀÀµ

        public IDataAccess Ida

       {

           set { _ida = value; }

           get { return _ida; }

       }

 

       public void Add()

       {

           _ida.Add();

       }

}

È»ºóÔÚ¿ØÖÆÌ¨³ÌÐòÖУ¬¸øÊôÐÔ¸³Öµ£¬´Ó¶ø´«µÝÒÀÀµ£º

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

 

namespace DIPTest

{

    class Program

    {

        static void Main(string[] args)

        {

            AccessDal dal = new AccessDal();//ÔÚÍⲿ´´½¨ÒÀÀµ¶ÔÏó

            Order order = new Order();

            order.Ida = dal;//¸øÊôÐÔ¸³Öµ

 

            order.Add();

 

            Console.Read();

        }

    }

}

ÎÒÃÇ¿ÉÒԵõ½ÉÏÊöͬÑùµÄ½á¹û¡£

·½·¨Èý ½Ó¿Ú×¢Èë

Ïà±È¹¹Ô캯Êý×¢ÈëºÍÊôÐÔ×¢È룬½Ó¿Ú×¢ÈëÏÔµÃÓÐЩ¸´ÔÓ£¬Ê¹ÓÃÒ²²»³£¼û¡£¾ßÌå˼·ÊÇÏȶ¨ÒåÒ»¸ö½Ó¿Ú£¬°üº¬Ò»¸öÉèÖÃÒÀÀµµÄ·½·¨¡£È»ºóÒÀÀµÀ࣬¼Ì³Ð²¢ÊµÏÖÕâ¸ö½Ó¿Ú¡£

Ê×Ïȶ¨ÒåÒ»¸ö½Ó¿Ú£º

public interface IDependent

{

           void SetDependence(IDataAccess ida);//ÉèÖÃÒÀÀµÏî

}

ÒÀÀµÀàʵÏÖÕâ¸ö½Ó¿Ú£º

public class Order : IDependent

 {

     private IDataAccess _ida;//¶¨ÒåÒ»¸ö˽ÓбäÁ¿±£´æ³éÏó

 

     //ʵÏÖ½Ó¿Ú

     public void SetDependence(IDataAccess ida)

     {

         _ida = ida;

     }

 

     public void Add()

     {

         _ida.Add();

     }

 

 }

¿ØÖÆÌ¨³ÌÐòͨ¹ýSetDependence·½·¨´«µÝÒÀÀµ£º

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

 

namespace DIPTest

{

    class Program

    {

        static void Main(string[] args)

        {

            AccessDal dal = new AccessDal();//ÔÚÍⲿ´´½¨ÒÀÀµ¶ÔÏó

          Order order = new Order();

 

            order.SetDependence(dal);//´«µÝÒÀÀµ

 

            order.Add();

 

            Console.Read();

        }

    }

}

ÎÒÃÇͬÑùÄܵõ½ÉÏÊöµÄÊä³ö½á¹û¡£

IoCÈÝÆ÷

Ç°ÃæËùÓеÄÀý×ÓÖУ¬ÎÒÃǶ¼ÊÇͨ¹ýÊÖ¶¯µÄ·½Ê½À´´´½¨ÒÀÀµ¶ÔÏ󣬲¢½«ÒýÓô«µÝ¸ø±»ÒÀÀµÄ£¿é¡£±ÈÈ磺


SqlServerDal dal = new SqlServerDal();//ÔÚÍⲿ´´½¨ÒÀÀµ¶ÔÏó

Order order = new Order(dal);//ͨ¹ý¹¹Ô캯Êý×¢ÈëÒÀÀµ

¶ÔÓÚ´óÐÍÏîÄ¿À´Ëµ£¬Ï໥ÒÀÀµµÄ×é¼þ±È½Ï¶à¡£Èç¹û»¹ÓÃÊÖ¶¯µÄ·½Ê½£¬×Ô¼ºÀ´´´½¨ºÍ×¢ÈëÒÀÀµµÄ»°£¬ÏÔȻЧÂʺܵͣ¬¶øÇÒÍùÍù»¹»á³öÏÖ²»¿É¿ØµÄ³¡Ãæ¡£ÕýÒòÈç´Ë£¬IoCÈÝÆ÷µ®ÉúÁË¡£IoCÈÝÆ÷ʵ¼ÊÉÏÊÇÒ»¸öDI¿ò¼Ü£¬ËüÄܼò»¯ÎÒÃǵŤ×÷Á¿¡£Ëü°üº¬ÒÔϼ¸¸ö¹¦ÄÜ£º

¶¯Ì¬´´½¨¡¢×¢ÈëÒÀÀµ¶ÔÏó¡£

¹ÜÀí¶ÔÏóÉúÃüÖÜÆÚ¡£

Ó³ÉäÒÀÀµ¹ØÏµ¡£

Ŀǰ£¬±È½ÏÁ÷ÐеÄIocÈÝÆ÷ÓÐÒÔϼ¸ÖÖ£º

1. Ninject: http://www.ninject.org/

2. Castle Windsor: http://www.castleproject.org/container/index.html

3. Autofac: http://code.google.com/p/autofac/

4. StructureMap£º http://docs.structuremap.net/

5. Unity£º http://unity.codeplex.com/

×¢£º¸ù¾ÝÔ°ÓÑ ÐìÉÙÏÀ µÄÌáÐÑ£¬MEF²»Ó¦¸ÃÊÇIoCÈÝÆ÷¡£ÎÒÓÖ²éÔÄÁËһЩ×ÊÁÏ£¬¾õµÃMEF×÷ΪIoCÈÝÆ÷ÊÇÓеãÃãÇ¿£¬ËüµÄÖ÷Òª×÷Óû¹ÊÇÓÃÓÚÓ¦ÓóÌÐòÀ©Õ¹£¬±ÜÃâÉú³É´àÈõµÄÓ²ÒÀÀµÏî¡£

6. MEF: http://msdn.microsoft.com/zh-cn/library/dd460648.aspx

ÁíÍ⣬԰ÓÑ aixuexi Ìá³öSpring.NETÒ²ÊDZȽÏÁ÷ÐеÄIoCÈÝÆ÷¡£

7. Spring.NET£º http://www.springframework.net/

Ô°ÓÑ wdwwtzy Ò²ÍÆ¼öÁËÒ»¸ö²»´íµÄIoCÈÝÆ÷£º

8. LightInject: http://www.lightinject.net/ £¨ÍƼöʹÓÃChromeä¯ÀÀÆ÷·ÃÎÊ£©

ÒÔNinjectΪÀý£¬ÎÒÃÇͬÑùÀ´ÊµÏÖ [·½·¨Ò» ¹¹Ô캯Êý×¢Èë] µÄ¹¦ÄÜ¡£

Ê×ÏÈÔÚÏîÄ¿Ìí¼ÓNinject³ÌÐò¼¯£¬Í¬Ê±Ê¹ÓÃusingÖ¸ÁîÒýÈë¡£

using Ninject;

È»ºó£¬IocÈÝÆ÷×¢²á°ó¶¨ÒÀÀµ£º

StandardKernel kernel = new StandardKernel();

 

kernel.Bind().To();//×¢²áÒÀÀµ

½ÓÏÂÀ´£¬ÎÒÃÇ»ñÈ¡ÐèÒªµÄOrder¶ÔÏó£¨×¢ÈëÁËÒÀÀµ¶ÔÏ󣩣º

Order order = kernel.Get<Order>();

ÏÂÃæ£¬ÎÒÃÇдһ¸öÍêÕûµÄ¿ØÖÆÌ¨³ÌÐò

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using Ninject;

 

namespace DIPTest

{

    class Program

    {

        static void Main(string[] args)

        {

           StandardKernel kernel = new StandardKernel();//´´½¨IocÈÝÆ÷

           kernel.Bind().To();//×¢²áÒÀÀµ

 

             Order order = kernel.Get();//»ñȡĿ±ê¶ÔÏó

 

             order.Add();

           Console.Read();

        }

    }

}

Êä³ö½á¹û£º

ʹÓÃIoCÈÝÆ÷£¬ÎÒÃÇͬÑùʵÏÖÁ˸ù¦ÄÜ¡£

×ܽá

ÔÚ±¾ÎÄÖУ¬ÎÒÊÔͼÒÔ×îͨË׵ķ½Ê½½²½â£¬Ï£ÍûÄܰïÖú´ó¼ÒÀí½âÕâЩ¸ÅÄî¡£ÏÂÃæÎÒÃÇÒ»ÆðÀ´×ܽáһϣºDIPÊÇÈí¼þÉè¼ÆµÄÒ»ÖÖ˼Ï룬IoCÔòÊÇ»ùÓÚDIPÑÜÉú³öµÄÒ»ÖÖÈí¼þÉè¼ÆÄ£Ê½¡£DIÊÇIoCµÄ¾ßÌåʵÏÖ·½Ê½Ö®Ò»£¬Ê¹ÓÃ×îΪ¹ã·º¡£IoCÈÝÆ÷ÊÇDI¹¹Ô캯עÈëµÄ¿ò¼Ü£¬Ëü¹ÜÀí×ÅÒÀÀµÏîµÄÉúÃüÖÜÆÚÒÔ¼°Ó³Éä¹ØÏµ¡£

   
4688 ´Îä¯ÀÀ       27
Ïà¹ØÎÄÕÂ

ΪʲôҪ×ö³ÖÐø²¿Êð£¿
ÆÊÎö¡°³ÖÐø½»¸¶¡±£ºÎå¸öºËÐÄʵ¼ù
¼¯³ÉÓë¹¹½¨Ö¸ÄÏ
³ÖÐø¼¯³É¹¤¾ßµÄÑ¡Ôñ-×°ÔØ
 
Ïà¹ØÎĵµ

³ÖÐø¼¯³É½éÉÜ
ʹÓÃHudson³ÖÐø¼¯³É
³ÖÐø¼¯³ÉÖ®-ÒÀÀµ¹ÜÀí
IPD¼¯³É²úÆ·¿ª·¢¹ÜÀí
Ïà¹Ø¿Î³Ì

ÅäÖùÜÀí¡¢ÈÕ¹¹½¨Óë³ÖÐø¼¯³É
Èí¼þ¼Ü¹¹Éè¼Æ·½·¨¡¢°¸ÀýÓëʵ¼ù
µ¥Ôª²âÊÔ¡¢Öع¹¼°³ÖÐø¼¯³É
»ùÓÚAndroidµÄµ¥Ôª¡¢ÐÔÄܲâÊÔ
×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]

ÖØ¹¹-ʹ´úÂë¸ü¼ò½àÓÅÃÀ
Visitor Parttern
ÓÉ±í¼°À￴ģʽ
Éè¼ÆÄ£Ê½Ëæ±ÊϵÁÐ
ÉîÈëdz³öÉè¼ÆÄ£Ê½-½éÉÜ
.NETÖеÄÉè¼ÆÄ£Ê½

Ïà¹ØÅàѵ¿Î³Ì

J2EEÉè¼ÆÄ£Ê½ºÍÐÔÄܵ÷ÓÅ
Ó¦ÓÃģʽÉè¼ÆJavaÆóÒµ¼¶Ó¦ÓÃ
Éè¼ÆÄ£Ê½Ô­ÀíÓëÓ¦ÓÃ
J2EEÉè¼ÆÄ£Ê½Ö¸ÄÏ
µ¥Ôª²âÊÔ+ÖØ¹¹+Éè¼ÆÄ£Ê½
Éè¼ÆÄ£Ê½¼°ÆäCSharpʵÏÖ


ijµçÁ¦¹«Ë¾ Éè¼ÆÄ£Ê½Ô­Àí
À¶ÍØÆË Éè¼ÆÄ£Ê½Ô­Àí¼°Ó¦ÓÃ
ÎÀÐǵ¼º½ UML & OOAD
ÌÀɭ·͸Ñз¢ÖÐÐÄ UML& OOAD
Öдïµçͨ Éè¼ÆÄ£Ê½Ô­Àí
Î÷ÃÅ×Ó Ç¶ÈëʽÉè¼ÆÄ£Ê½
 
 
 
¡¡