Hi Ricardo,

WOInject is a framework that enables dependency injection in WebObjects 
applications by integrating the Guice framework.

OK. It doesn't help much. :) I'm not sure about the level of knowledge you have 
about DI or Guice. So, here is a list of the topics you should know to 
understand what WOInject can do for you. You can skip the topics you are 
already familiar with.

1) What is dependency injection?

You can learn the theory behind dependency injection and inversion of control 
containers in the Martin Fowler article [1] about the subject.

2) What is Guice?

I think the Motivation page [2] on the Guice's User Guide is the best place to 
start understanding the basic problems, and the solutions proposed by Guice.

3) What is WOInject?

WOInject is just a framework to integrate Guice with WebObjects in a 
non-intrusive manner. So, what Guice can do for you?

Suppose you have a Service interface and a BasicService implementation for it. 
This Service is required across your components. So you have something like 
this:

class ComponentOne {
        Service service = new BasicService();
}

class ComponentTwo {
        Service service = new BasicService();
}

...

Then, the project evolves, and you develop a new AdvancedService implementation 
for the Service interface. You have to traverse the entire code base updating 
the instantiation of Service.

On the other hand, if you use Guice, you can delegate the creation of Services 
to Guice, and inject the instances of Service when required. You write code 
like this:

class ComponentOne {
        @Inject
        Service service;
}

class ComponentTwo {
        @Inject
        Service service;
}

...

And you configure a Guice Module to specify that you want an instance of 
BasicService (or an AdvancedService) when you need a Service.

class AppModule extends AbstractModule {
        void configure() {
                bind(Service.class).to(BasicService.class);
        }
}

If you need to change the implementation class, you just have to redefine your 
module:

class AppModule extends AbstractModule {
        void configure() {
                bind(Service.class).to(AdvancedService.class);
        }
}

This is a basic example of what Guice (and dependency injection) can do for 
you. Real-world problems are much more complex. A Service implementation may 
require a Connection that needs a URL and Credentials to work. Guice can handle 
the entire hierarchy of dependencies for you. 

Of course, Guice can do a lot more for you. I'm still preparing a few use cases 
for the WOInject's User Guide to demonstrate situations where dependency 
injection is helpful and other Guice's features that make it so powerful. 

[1]http://martinfowler.com/articles/injection.html
[2]http://code.google.com/p/google-guice/wiki/Motivation

Cheers,

Henrique

On 05/04/2012, at 16:17, Ricardo J. Parada wrote:

> 
> 
> Is there a short explanation of what it does?  Can it be explained with a 
> code snippet or in a paragraph?
> I still don't quite understand the concept.  :-)
> 
> 
> 
> 
> On Apr 4, 2012, at 1:11 PM, Henrique Prange wrote:
> 
>> Hi Paul,
>> 
>> Don't get me wrong. I really appreciate the interest in WOInject. It is an 
>> honor for me to talk on WOWODC again. I'm working hard here to make it 
>> happen. However, I'm still not sure if I'll be able to afford the trip to 
>> Canada. :( So, I don't want to create expectations for something I may not 
>> be able to deliver.
>> 
>> Cheers,
>> 
>> Henrique
>> 
>> On 04/04/2012, at 02:02, Paul Hoadley wrote:
>> 
>>> On 15/03/2012, at 5:04 PM, Johann Werner wrote:
>>> 
>>>> Am 15.03.2012 um 07:12 schrieb ISHIMOTO Ken:
>>>> 
>>>>> Would be nice to see that at WOWODC in Action.
>>>> 
>>>> +1
>>> 
>>> Hey, Henrique, I didn't see a response to this—any chance you'll be at 
>>> WOWODC 12 and in the mood for a talk/demo/workshop on WOInject?  Even 
>>> informally?
>>> 
>>> 
>>> -- 
>>> Paul.
>>> 
>>> http://logicsquad.net/
>>> 
>>> 
>>> 
>>> _______________________________________________
>>> Do not post admin requests to the list. They will be ignored.
>>> Webobjects-dev mailing list      ([email protected])
>>> Help/Unsubscribe/Update your Subscription:
>>> https://lists.apple.com/mailman/options/webobjects-dev/hprange%40gmail.com
>>> 
>>> This email sent to [email protected]
>> 
>> 
>> _______________________________________________
>> Do not post admin requests to the list. They will be ignored.
>> Webobjects-dev mailing list      ([email protected])
>> Help/Unsubscribe/Update your Subscription:
>> https://lists.apple.com/mailman/options/webobjects-dev/rparada%40mac.com
>> 
>> This email sent to [email protected]
> 


 _______________________________________________
Do not post admin requests to the list. They will be ignored.
Webobjects-dev mailing list      ([email protected])
Help/Unsubscribe/Update your Subscription:
https://lists.apple.com/mailman/options/webobjects-dev/archive%40mail-archive.com

This email sent to [email protected]

Reply via email to