fbpx
devstyle.pl - Blog dla każdego programisty
devstyle.pl - Blog dla każdego programisty
2 minut

Web Client Software Factory – Dependency Injection w Global.asax


19.01.2009

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.

Comments are closed.

Kurs Gita

Zaawansowany frontend

Szkolenie z Testów

Szkolenie z baz danych

Książka

Zobacz również