Blog

POST #57 : Micon : Injection de dépendance version Ruby => simple

Added by Romain GEORGES over 1 year ago

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