ÁÖ»çÇÏ´Ù ¼øÀ§ ¹× ¿ä¾à
- ƯÇã:
- MIT/X Consortium Lic...
- °Ô½ÃÀÚ À̸§:
- Ivan Korobkov
- °Ô½ÃÀÚ À¥»çÀÌÆ®:
- http://code.google.com/u/Ivan.Korobkov/
ÁÖ»çÇϴ٠ű×
ÁÖ»çÇÏ´Ù ¼³¸í
ºü¸¥ ÆÄÀ̽ã Á¾¼Ó¼º ÁÖÀÔ ÁÖ»ç´Â ºü¸¥ ÆÄÀ̽ã Á¾¼Ó¼º ÁÖÀÔ ¶óÀ̺귯¸®ÀÔ´Ï´Ù. ±×°ÍÀº µ¥ÄÚ·¹ÀÌÅÍ¿Í µð½ºÅ©¸³Å͸¦ »ç¿ëÇÏ¿© ¿ÜºÎ Á¾¼Ó¼ºÀ» ÂüÁ¶ÇÏ°í ½ºÄÚÇÁ (Guice-Inspired)¸¦ »ç¿ëÇÏ¿© °³Ã¼¸¦ Àç»ç¿ëÇÏ´Â ¹æ¹ýÀ» ÁöÁ¤ÇÕ´Ï´Ù. Á¾¼Ó¼ºÀº À¯Çü°ú ¼±ÅÃÀû ÁÖ¼®º°·Î ÂüÁ¶ µÉ ¼ö ÀÖ½À´Ï´Ù. ±¸¼ºÀÌ ÇÊ¿äÇÏÁö¸¸ °í±Þ ÀÎ ÄÚµå ±¸¼ºÀÌ °¡´ÉÇÕ´Ï´Ù. Pycontainer ¶Ç´Â Spring Python°ú °°Àº ´Ù¸¥ Python Á¾¼Ó¼º ÀÎÁ§¼Ç µµ±¸´Â ´Ù¸¥ ¾ð¾î (Java)ÀÇ Æ÷Æ®ÀÔ´Ï´Ù. ±×·¡¼ ±×µéÀº Martin Fowler.pythonÀÌ ¼³¸íÇÏ´Â Á¤ÀûÀ¸·Î ÀÔ·Â ÇÑ ¾ð¾î¿¡ ´ëÇÑ Á¾¼Ó¼º ÁÖÀÔ ¹æ½ÄÀ» ±â¹ÝÀ¸·ÎÇÕ´Ï´Ù. ÇϳªÀÇ ¾ð¾î·Î ÀûÀýÇÏ°í »ç¿ëÇÒ ¼öÀÖ´Â ÆÐÅÏ ¹× ÇÁ·Î±×·¡¹Ö ±â¼úÀº ´Ù¸¥ ¾ð¾î·Î ¾î»ö ÇÒ ¼ö ÀÖ½À´Ï´Ù. ƯÁ¤ Python ±â´ÉÀ» È°¿ëÇÏ¿© _pythonic_ ÀÇÁ¸¼º ÁÖÀÔÀ» Á¦°øÇϱâ À§ÇØ ÁÖÀÔÀÌ »ý¼ºµÇ¾ú½À´Ï´Ù. ÁÖÀÔ¿¡ »ç¿ë µÈ ¿ë¾î´Â ÀǵµÀûÀ¸·Î À¯»çÇÏÁö¸¸ ³»ºÎ ¾ÆÅ°ÅØó°¡ ´Ù¸¨´Ï´Ù. example : import inject@Inject.AppScopeclass Config (Object) : PassClass A (Object) : PassClass B (°´Ã¼) : PassClass C (°´Ã¼) : config = inject.attr ( 'config', config) a = inject.attr ( 'a) @ inject.param ('b ', b) : def __init __ (self, b) : self.b = bc = C () ¿©±â¼ "Inject"ÀÇ ¸î °¡Áö ÁÖ¿ä ±â´ÉÀÌ ÀÖ½À´Ï´Ù. ¡¤ Á÷Á¢ ÀνºÅϽºÈº¸´Ù 2-3 ¹è ´õ ºü¸£°í, ´ÜÁö 2-3 ¹è°¡ ´À·ÁÁý´Ï´Ù. ¡¤ °´Ã¼, Ŭ·¡½º (* ARGS, ** kwargs)¸¦ ÀνºÅϽºÈÇÏ´Â Á¤»óÀûÀÎ ¹æ¹ý. ¡¤ Àμö¸¦ ÇÔ¼ö ¹× ¹æ¹ýÀ¸·Î ÁÖÀÔÇÕ´Ï´Ù. ¡¤ À¯Çü ¹× ¼±Åà ÁÖ¼®º°·Î Á¾¼Ó¼ºÀ» ÂüÁ¶ÇÕ´Ï´Ù. ¡¤ È£Ãâ ºÎÇ°, ÀνºÅϽº ¹× ¾ð ¹Ù¿îµå ¹æ¹ý¿¡ ´ëÇÑ ¹ÙÀεù (È£ÃâÀÚ ÂüÁ¶). ¡¤ WSGI ¹× Django ÀÀ¿ë ÇÁ·Î±×·¥ (Python2.5 + ÇÊ¿ä)¿¡ ´ëÇÑ ¹üÀ§ ¹Ìµé¿þ¾î¸¦ ¿äûÇϽʽÿÀ. ¡¤ ÀüÇô ±¸¼ºÀÌ ÇÊ¿äÇÏÁö ¾Ê½À´Ï´Ù. °í±Þ À¯¿¬ÇÑ ±¸¼º °¡´É : ¡¤ injector.Bind (Ŭ·¡½º, = Ŭ·¡½º 2) ¡¤ injector.Bind (µ¥ÀÌÅͺ£À̽º, ÁÖ¼® = '»ç¿ëÀÚ', to = userdatabase, scope = appscope) ¡¤ injector.bind ( 'app_started_at', = datetime.now ())) ¡¤ injector.bind ( 'some_var', to = class.unbound_method) µÎ °³ÀÇ »çÃâ ¹æ¹ý, ¼³¸íÀÚ ¹× µ¥ÄÚ·¹ÀÌÅÍ : Class My (Object) : ¡¤ attr = inject.attr ( 'attr', class2) @ inject.param ( 'param', class2) : def myfunc (param) : ¡¤ Åë°úÇÏ´Ù inject.super¸¦ ±âº» kwarg °ªÀ¸·Î Àü´ÞÇÏ¿© »ó¼ÓÀ» Áö¿øÇÕ´Ï´Ù. Class My (Object) : ¡¤ @ inject.param ( 'param1', class1) def __init __ (self, param1) : ¡¤ self.param1 = param1. Class My2 (My) : ¡¤ @ inject.param ( 'param2', class2) def __init __ (self, param2, param1 = inject.super) : ¡¤ ½´ÆÛ (MY2, ÀÚü) .__ init __ (param1 = param1) ¡¤ self.param2 = param2. È£ÃâÀÚ°¡ ¾ð ¹Ù¿îµå ¹æ¹ýÀ» È£ÃâÇÕ´Ï´Ù (ûÃëÀÚ¸¦À§ÇÑ Äð) : Class My (Object) : def get_data (self) : ¡¤ Åë°úÇÏ´Ù ¡¤ ¾ð ¹Ù¿îµå ¸Þ¼Òµå¸¦ È£ÃâÇϴ ȣÃâÀÚ¸¦ ¸¸µì´Ï´Ù. ¡¤ invoker = inject.invoker (my.get_data) ¡¤ µ¥ÀÌÅÍ = invoker () ¡¤ ¹ÙÀεù µÈ ¹æ¹ýÀ¸·Î ¹ÙÀεùÇϽʽÿÀ. ¡¤ @ inject.param ( 'data', my.get_data) DEF FUNC (µ¥ÀÌÅÍ) : ¡¤ Åë°úÇÏ´Ù ¡¤ ÀϺΠÁֻ縸ÀÌ ÁÖÀԵǴ °æ¿ì ºÎºÐ ÁÖ»ç. ¡¤ @ inject.param ( 'Logger', Logger) DEF Mylog (MSG, Logger) : ¡¤ Åë°úÇÏ´Ù ¡¤ mylog ( '³» ¸Þ½ÃÁö') ¡¤ ½ºÄÚÇÁ : ÀÀ¿ë ÇÁ·Î±×·¥ (½Ì±Û Åæ), ¿äû, ºñ°æ. Ŭ·¡½º ÄÁÆ®·Ñ·¯ (°´Ã¼) : ¡¤ ¼¼¼Ç = inject.attr ( '¼¼¼Ç', ¼¼¼Ç, Scope = reqscope) ¡¤ ¶Ç´Â ±¸¼º¿¡¼ ¡¤ injector.Bind (¼¼¼Ç, To = Session, Scope = ReqScope) ¡¤ ¶Ç´Â ±âº» ¹üÀ§¸¦ ¼³Á¤ÇϽʽÿÀ ¡¤ @reqscope. Ŭ·¡½º ¼¼¼Ç (°´Ã¼) : ¡¤ Åë°úÇÏ´Ù ¡¤ @AppScope. Class DatabasePool (Object) : ¡¤ Åë°úÇÏ´Ù ±âÁ¸ ÇÁ·ÎÁ§Æ®¿¡ ½±°Ô ÅëÇյ˴ϴÙ. ¿ä±¸ »çÇ× : ¡¤ ÆÄÀ̽ã
ÁÖ»çÇÏ´Ù °ü·Ã ¼ÒÇÁÆ®¿þ¾î