Everyone's opinion on what defines an IoC container differs - even guys well known in the DI area don't agree on what makes an IoC container. I know this because we involved a lot of them throughout the development of MEF - some worked on our team, Nick (Autofac) and Hammet (Windsor), and others were on the MEF insiders group that we used to call monthly.
Where do you think Nick got the inspiration for that relationship zoo post he blogged about? MEF has a representation for every one of those dependency relationships, Autofac actually added some of them after MEF. :) I'm actually using MEF as my mainline IoC container. In the next update of MEF (I believe we've got a preview drop on the codeplex site), some of the major things missing have been added in the box (open generics, fluent interface - registration builder), factories and parameterized construction have been there since day v1, ExportFactory was added to v2 (Silverlight). When I do find things that are missing, I usually just end up writing an ExportProvider or Catalog that enables it. For example, we have a bunch of legacy IServiceProvider provided services in VS - I plugged in my own ExportProvider, now all of sudden I can start [Import]ing them, and not have my components touch the IServiceProvider. We don't have AOP, and I don't think we'll ever add it - we of the opinion that this sort of thing needs to happen at compile time (think in PostSharp, CCI, and compiler-as-a-service terms), not at runtime. Lifetime is limited, but we wanted to keep it that way. What do you think is missing? Blast away and I'll file some suggestions internally. From: [email protected] [mailto:[email protected]] On Behalf Of Matt Siebert Sent: Thursday, August 25, 2011 6:04 PM To: ozDotNet Subject: Re: Anyone using Prism? I agree. This issue is discussed several times on MEF's CodePlex site: http://mef.codeplex.com/discussions/35083 http://mef.codeplex.com/discussions/43823 http://mef.codeplex.com/discussions/43424 Admittedly, these may be a little dated but some of Glenn Block's comments are very enlightening. The following post is also worth reading: http://blogs.msdn.com/b/nblumhardt/archive/2009/03/16/hosting-mef-extensions-in-an-ioc-container.aspx On Fri, Aug 26, 2011 at 10:24 AM, Jake Ginnivan <[email protected]<mailto:[email protected]>> wrote: I don't agree that both MEF and Autofac are IoC containers. Sure they both perform dependency injection, but MEF was never designed to solve the same issues that today's IoC containers solve. MEF is more about architecture and extensibility, where the IoC containers help us manage a set of static resources and relationships between those resources. Mef has no support for Open Generics, Automatic factories, parameterised construction, AOP and the lifetime support is more basic. I would use mef to discover, and let me know when there are more modules, then use new ContainerBuilder().. register new components, _container.Update(containerBuilder); Regards, Jake Ginnivan Readify | Senior Developer | MVP (VSTO) M: +61 403 846 400<tel:%2B61%20403%20846%20400> | E: [email protected]<mailto:[email protected]> | W: www.readify.net<http://www.readify.net/> From: [email protected]<mailto:[email protected]> [mailto:[email protected]<mailto:[email protected]>] On Behalf Of David Kean Sent: Thursday, 25 August 2011 10:58 PM To: ozDotNet Subject: RE: Anyone using Prism? I would either use MEF or I would use Autofac. I wouldn't mix them together. They are both IoC containers, and are both around to solve the same problems. I personally use MEF, but I worked on it so I'm a little bias. I would use MEF if you don't want to take a dependency on something outside of the framework, otherwise, I would evaluate all the good IoC containers (Castle Windsor, StructureMap, Autofac, Unity) out there and pick the one you feel most comfortable with. From: [email protected]<mailto:[email protected]> [mailto:[email protected]]<mailto:[mailto:[email protected]]> On Behalf Of Matt Siebert Sent: Thursday, August 25, 2011 5:44 AM To: ozDotNet Subject: Re: Anyone using Prism? Take a look at http://code.google.com/p/autofac/wiki/MefIntegration It's not a tutorial but shows how you could use MEF with Autofac. I haven't tried it yet but I'm about to start using MEF (and probably Autofac too) in my current project. On Thursday, August 25, 2011, Kirsten Greed <[email protected]<mailto:[email protected]>> wrote: > Thanks Jake > > Do you know of any good tutorials on MEF and Autofac? > > Kirsten > > > > ________________________________ > > From: [email protected]<mailto:[email protected]> > [mailto:[email protected]<mailto:[email protected]>] > On Behalf Of Jake Ginnivan > Sent: Thursday, 25 August 2011 1:50 PM > To: ozDotNet > Subject: RE: Anyone using Prism? > > > > Quite good timing actually, here is a post which backs up my point about > staying away from unity if you want a well performing app: > > > > http://philipm.at/2011/0808/ > > > > Another negative side effect of Prism is that modules have a single Run > method. Which you have to do your container registrations and resolve your > dependencies. > > > > Internally when you resolve, if you have performed any registrations since > you last resolved the container has to rebuild it's dependency tree, which is > costly. Autofac forces you to create a ContainerBuilder then build the > container from that, so you mentally separate registration and resolutions, > this has the advantage that Autofac does not have to lock the container when > you perform a Resolve, reducing contention and once again speeding the > container up. Unity has to lock on all operations. > > > > Regards, > > Jake Ginnivan > Readify | Senior Developer | MVP (VSTO) > > M: +61 403 846 400<tel:%2B61%20403%20846%20400> | E: > [email protected]<mailto:[email protected]> | W: > www.readify.net<http://www.readify.net> <http://www.readify.net/> > > > > From: [email protected]<mailto:[email protected]> > [mailto:[email protected]<mailto:[email protected]>] > On Behalf Of J
