Blog
User blogs
| Romain GEORGES |
Tag cloud
POST #57 : Micon : Injection de dépendance version Ruby => simple
DI made easy !
Injection de dépendances et Ruby¶
j'ai parler dans mon dernier post de IoC : Design pattern Inversion of Control et de l'application : l'injection de dépendance, je vais pas rééxpliquer ici, mais je vais vous donner une solution,
très Ruby, très simple :
[[micon|https://github.com/alexeypetrushin/micon]]
h3.comment ça s'installe ?
$ sudo zsh # gem ins micon
Comment ça s'utilise ?¶
1 require 'rubygems' 2 require 'micon' 3 require 'logger' 4 5 micon.register(:logger){Logger.new STDOUT} 6 7 class Application 8 9 inject :logger 10 11 def run 12 logger.info 'running ...' 13 p logger 14 end 15 end 16 17 class Application2 18 inject :logger 19 20 def run 21 logger.info 'running twice...' 22 p logger 23 end 24 end 25 26 Application.new.run 27 28 Application2.new.run
Le résultat¶
I, [2012-03-20T18:16:38.799969 #8203] INFO -- : running ... #<Logger:0xb72d776c @progname=nil, @logdev=#<Logger::LogDevice:0xb72d7730 @shift_size=nil, @shift_age=nil, @filename=nil, @mutex=#<Logger::LogDevice::LogDeviceMutex:0xb72d7708 @mon_entering_queue=[], @mon_count=0, @mon_owner=nil, @mon_waiting_queue=[]>, @dev=#<IO:0xb7468568>>, @level=0, @default_formatter=#<Logger::Formatter:0xb72d7758 @datetime_format=nil>, @formatter=nil> I, [2012-03-20T18:16:38.800144 #8203] INFO -- : running twice... #<Logger:0xb72d776c @progname=nil, @logdev=#<Logger::LogDevice:0xb72d7730 @shift_size=nil, @shift_age=nil, @filename=nil, @mutex=#<Logger::LogDevice::LogDeviceMutex:0xb72d7708 @mon_entering_queue=[], @mon_count=0, @mon_owner=nil, @mon_waiting_queue=[]>, @dev=#<IO:0xb7468568>>, @level=0, @default_formatter=#<Logger::Formatter:0xb72d7758 @datetime_format=nil>, @formatter=nil>
Constat¶
Au passage j'ai fait deux Application avec deux injection pour bien vous montrez que mon component logger est bien un singleton
Remarque¶
Micon offre plus que la DI, mais aussi de la distribution de config et plein d'autres petites choses élégantes, dans un monde de pierres précieuses...
Also available in: Atom