ÕªÒª
ÃæÏò¶ÔÏóÉè¼Æ£¨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Ö¸ÁîÒýÈë¡£
È»ºó£¬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¹¹Ô캯עÈëµÄ¿ò¼Ü£¬Ëü¹ÜÀí×ÅÒÀÀµÏîµÄÉúÃüÖÜÆÚÒÔ¼°Ó³Éä¹ØÏµ¡£ |