piątek, 12 kwietnia 2013

[IoC] StructureMap

Kolejnym ciekawym kontenerem IoC, po Unity i Castle of Windsor, jest StructureMap. API wszystkich trzech jest bardzo podobne, choć StructureMap rozwijany jest od 2004 roku i początkowo korzystało się z niego w zupełnie inny sposób. W celu dodania go do projektu w Visual Studio korzystamy z NuGeta.


Aby wykorzystać StructureMap, musimy pamiętać, aby używać .NET Framework 4.0 w wersji pełnej (nie zadziała wersja Client Profile. Pracę z kontenerem pokazano poniżej:

using(var structureMapContainer = new Container())
{
    structureMapContainer.Configure(x => x.For<IEngine>().Use<GasEngine>());
    var car3 = structureMapContainer.GetInstance<AudiA4>();
    car3.Run();
}

Konfiguracja odbywa się przez lambda expressions, nie musimy rejestrować wszystkich typów (tych, o które nie prosimy przez interfejs). Poniżej kilka innych użytecznych funkcjonalności:

public class AudiA4Registry : Registry
{
    public AudiA4Registry()
    {
        For<IEngine>().LifecycleIs(new SingletonLifecycle()).Use<DieselEngine>();
    }


using (var structureMapContainer = new Container(new AudiA4Registry()))
{
    var car3 = structureMapContainer.TryGetInstance<AudiA4>();
    if(car3 != null)
        car3.Run();
}

Rejestry pozwalają na odseparowanie kodu konfigurującego kontener. Metoda TryGetInstance zwróci w przypadku powyższego kodu null, ponieważ typ nie jest jawnie zarejestrowany.

Brak komentarzy:

Prześlij komentarz