2010-03-09

TinyIoC - Lille sej DI container

Jeg faldt fornylig over en lille simple DI container kaldet TinyIoCtwitter. filosofien bag denne DI container er, at man ikke behøver at skulle tilføje en ekstra assembly (eller flere) for at kunne bruge en DI container. Den er selvfølgelig heller ikke egnet til løsninger med mange og komplekse afhængigheder, men til mindre løsninger kan den sagtens anvendes.

Her er et eksempel på hvor simpelt det er at anvende den. Jeg har lavet et konsolprojekt og har kopieret TinyIoC.cs ind i projektet.

Jeg har herefter lavet et par interfaces og klasser, som jeg vil benytte TinyIoC til at oprette instanser af. Selvom det er nogle små klasser og et lidt specialt mønster, håber jeg at man kan umiddelbart kan gennemskue dette - her er et klassediagram over disse klasser:


For at initalisere en instans af Cat på traditionel vis (Poor man's DI) skal jeg skrive følgende:

Farmer farmer = new Farmer();
Milk milk = new Milk(farmer);
IFood food = new Food();
ICat cat = new Cat(food,milk);

Hvis jeg istedet anvender TinyIoC containeren til at initialisere en Cat kan jeg nøjes med at skrive følgende:

var container = TinyIoCContainer.Current;
container.AutoRegister();
ICat cat = container.Resolve<ICat>();

Jeg benytter her muligheden for at auto registere objekterne og interfacene i DI containeren, jeg kunne også have regisreret dem enkeltvis, men det ville i dette tilfælde have gjort eksemplet for komplekst, til at man ville kunne se en fordel ved at bruge TinyIoC istedet for Poor Man's DI.

Ingen kommentarer:

Send en kommentar