W aplikacjach web dość często wykorzystuje się plik global.asax na przykład do przechwytywania wszystkich niewyłapanych wcześniej błędów. Zalogowanie takiego błędu może wymagać referencji do mechanizmu logującego używanego w całej aplikacji. Przykład:
1: private ILogger _logger;
2:
3: void Application_Error(object sender, EventArgs e)
4: {
5: Exception error = CurrentContext.Server.GetLastError();
6: _logger.Log(error);
7: }
W WCSF chcielibyśmy oczywiście, aby ILogger został wstrzyknięty przez DI. Dlatego zadeklarujemy go w sposób następujący:
1: private static ILogger _logger;
2: [ServiceDependency]
3: public ILogger Logger { set { _logger = value; } }
To jednak nie wystarczy - w tym przypadku musimy jawnie wymusić inicjalizację oznaczonych w ten sposób elementów. Korzystamy z ServiceDependency, więc wystarczy nam inicjalizacja jednokrotna. Do tego celu klasa bazowa aplikacji WCSF, czyli WebClientApplication, wystawia nam metodę Start(). Nadpiszemy ją i wywołamy proces wstrzykiwania zależności. Po kilku chwilach grzebania efektem jest poniższy kawałek kodu załatwiający całą inicjalizację klasy aplikacji:
1: protected override void Start()
2: {
3: base.Start();
4:
5: CompositionContainer.BuildItem(this.PageBuilder, this.GetModuleContainer(CurrentContext).Locator, this);
6: }
Instrukcje podające nam odpowiednią implementację Loggera wykonają się tylko za pierwszym żądaniem, przy starcie aplikacji. Dlatego też wynik przypiszemy do statycznej zmiennej. Koniec końców o to właśnie nam chodzi. Od tej pory możemy już do woli korzystać z loggera tudzież innych serwisów w podobny sposób wykorzystywanych.