msgbartop
Around Software Development and Innovation
msgbarbottom

27 Feb 11 Introduction to TDD,IOC and AOP

Sono un grande sostenitore della filosofia ALT.NET. Dato che ho avuto l’onore di fare lo speaker su argomenti condivisi all’interno della community ALT.NET, vi riporto le slides che ho mostrato in un mio intervento in CodeArchitects.

Bye

Antonio

27 Feb 11 IOC and Castle Windsor

Vi riporto la mia esperienza nell’uso del container IOC di Windsor dal progetto Castle.Si tratta di una libreria ottima per l’IOC che può rivaleggiare con Spring.NET. L’esempio che riporto è una semplice implementazione del Registry pattern in c# con le facilities IOC di Windsor. L’interfaccia del nostro servizio:

using System;

using System.Collections.Generic;

using System.Text;

namespace Common.Registry

{

public interface IRegistry

{

string getCurrentLanguage();string getCurrentUser();

void setCurrentLanguage(string lang);void setCurrentUser(string username);

}

}

Ora creiamo 2 classi che sono le implementazioni del nostro registry (una è basata sulla Session di ASP.NET).

using System;

using System.Collections.Generic;

using System.Text;

using System.Web;

namespace Common.Registry.Classes

{

public class SessionRegistry : IRegistry

{

#region IRegistry Memberspublic string getCurrentLanguage(){

return HttpContext.Current.Session[Constants.Language].ToString();}

public string getCurrentUser(){

return HttpContext.Current.Session[Constants.User].ToString();}

public void setCurrentLanguage(string lang){

HttpContext.Current.Session[Constants.Language]=lang;}

public void setCurrentUser(string username){

HttpContext.Current.Session[Constants.Language] = username;}

#endregion

}

}

L’IOC è espresso nel config.

<?xml version=”1.0″ encoding=”utf-8″ ?><configuration>

<configSections> <sectionname=”registry”

type=”Castle.Windsor.Configuration.AppDomain.CastleSectionHandler, Castle.Windsor” />

</configSections>

<registry>

<components><component id=”staticregistry” service=”Common.Registry.IRegistry,Common.Registry” type=”Common.Registry.Classes.StaticRegistry,Common.Registry”></component>

<component id=”sessionregistry” service=”Common.Registry.IRegistry,Common.Registry” type=”Common.Registry.Classes.SessionRegistry,Common.Registry”></component></components>

</registry>

</configuration>

Infine riporto un semplice unit test che verifica il tutto.

using System;

using System.Collections.Generic;

using System.Text;

using Castle.Core;

using Castle.MicroKernel;

using Castle.Core.Resource;

using Castle.Windsor.Configuration.Interpreters;

using Castle.Windsor;

using NUnit.Core;

using NUnit.Framework;

using Common.Registry.Classes;

using Common.Registry;

namespace TestRegistry

{

[TestFixture]

public class TestRegistry

{

[Test]

public void Test1(){

IWindsorContainer container =

new WindsorContainer(new XmlInterpreter(new ConfigResource(“registry”)));

IRegistry tmp = container.GetService<Common.Registry.IRegistry>();tmp.setCurrentLanguage(“it”);

Assert.AreEqual(“it”, tmp.getCurrentLanguage());container.Release(tmp);

}

}

}

Bye bye

Antonio