Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.java.programmer > #23565

Re: DI/wiring

From Daniele Futtorovic <da.futt.news@laposte-dot-net.invalid>
Newsgroups comp.lang.java.programmer
Subject Re: DI/wiring
Date 2013-04-22 09:03 +0200
Organization A noiseless patient Spider
Message-ID <kl2n6i$3l5$1@dont-email.me> (permalink)
References <DI-wiring-20130418174944@ram.dialup.fu-berlin.de> <kkpgls$6aq$1@dont-email.me>

Show all headers | View raw


On 18/04/2013 21:16, markspace allegedly wrote:
> On 4/18/2013 9:03 AM, Stefan Ram wrote:
>>    I have »invented« myself something that also seems to be
>>    known as »dependency injection« or »wiring«. I am doing it
> 
> I should have a look at Joerg's answer myself, but here's another idea.
> 
> Make an app context object that holds the state of your app.
> 
> class Context {
>   Engine getEngine()....
>   Printer getPrinter()...
> }
> 
> Inject that into submodules in the code.  Submodules are larger than
> classes and can treat the context as immutable.  The context then
> becomes global but only for that module.  The idea is that you still get
> dependency injecting, but you can still test reasonably as well.
> 
> class SomeConfig {
>   Context context;
>   public SomeConfig( Context c ) { context = c; }
> 
>   public init() {
>    Component c0 = new Component( context );
> 
> ....
>   }
> }
> 
> class Component  {
>   Context context;...
>   public printIt() {
>     context.getPrinter().do something...
>   }
> }
> 
> This reduces boilerplate but doesn't eliminate it.  For some projects it
> might be better to get a real dependency injection framework.

As a side note, since this approach has the drawback of requiring
additional constructor or method parameters (and hence targeted
factoring), I have in such cases often found it useful to provide the
context object via the threadlocal functionality.

In code terms, instead of:
  class Actor {
    void act( Context c ){ doSomethingWith( c.getXXX() ); }
  }
You'd have:
  class Actor {
    void act(){
      doSomethingWith( ContextHelper.getThreadLocalContext().getXXX() );
    }
  }

-- 
DF.

Back to comp.lang.java.programmer | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


Thread

Re: DI/wiring markspace <markspace@nospam.nospam> - 2013-04-18 12:16 -0700
  Re: DI/wiring Daniele Futtorovic <da.futt.news@laposte-dot-net.invalid> - 2013-04-22 09:03 +0200
    Re: DI/wiring markspace <markspace@nospam.nospam> - 2013-04-22 10:59 -0700
      Re: DI/wiring Daniele Futtorovic <da.futt.news@laposte-dot-net.invalid> - 2013-04-24 06:37 +0200
      Re: DI/wiring Arved Sandstrom <asandstrom2@eastlink.ca> - 2013-04-24 10:28 -0300

csiph-web