14° Workshop – DotNetMarche :: Castelfidardo, 16 Aprile 2010 Introduzione ai framework per IoC / DI e AOP
Andrea Balducci gmail.com Riferimenti andreabalducci
Framework TipoComportamento Unityhttp://unity.codeplex.com/Wikipage Ninjecthttp://ninject.org/ Autofachttp://code.google.com/p/autofac/ Springhttp:// Castle projecthttp://
Unity The Unity Application Block (Unity) is a lightweight extensible dependency injection container with support for constructor, property, and method call injection.
Definiamo un contratto public interface IOperazioneMatematica { int Esegui(int a, int b); }
Implementazione public class OperazioneSomma : IOperazioneMatematica { public int Esegui(int a, int b) { return a + b; }
Configurazione del container // Creazione container IUnityContainer container = new UnityContainer(); // Registrazione componenti container.RegisterType< IOperazioneMatematica,// contratto OperazioneSomma// implementazione >();
Utilizzo del container // Richiesta del servizio di calcolo var operazione = container.Resolve (); // Utilizzo del servizio int risultato = operazione.Esegui(1, 2);
Injection [InjectionConstructor] Per marcare un costruttore da utilizzare esplicitamente. In assenza viene usato il costruttore con il maggior numero di parametri. [Dependency] Marca il setter della property [InjectionMethod] Marca un metodo di inizializzazione
{demo}
Castle Windsor Castle Project offers two Inversion of Control Containers. The MicroKernel and the Windsor Container. The Castle MicroKernel is an inversion of control container that was designed towards extensibility. It combines facilities to grow orthogonally. Castle Windsor aggregates the MicroKernel and exposes a powerful configuration support. It is suitable for common enterprise application needs. It is able to register facilities and components based on the configuration and adds support for interceptors
Windsor - ComponentLifecycle TipoComportamento LifestyleType.Customhttp:// windsor-transient-objects-and-release-policies LifestyleType.PerWebRequestListanza è condivisa nella stessa request request (richiede HttpModule) LifestyleType.PooledLe istanze transienti possono essere riciclate LifestyleType.SingletonListanza è unica (default) LifestyleType.ThreadListanza è condivisa nello stesso thread LifestyleType.TransientListanza viene creata ad ogni richiesta
{demo}
Castle - Facilities IntegrationBasic ServicesSemantic ActiveRecordLoggingEventiWiring Aspect#Automatic TransactionFactorySupport iBatisNetTypedFactory NHibernateStartable PrevalenceOnCreate Db4o Remoting WCF Integration
{demo}
{grazie} andreabalducci