Zastrzeżenie: może poniższe wypociny to wcale nie Model-View-Presenter a Model-View-Controller, może MVC: Passive View a może MVC: Supervising Controller a może  MVP: Ostatnia Krew. Szczerze: I don't give a damn. (no... nie do końca; polecam artykuły Fowlera w sekcji Presentation Patterns jako bardzo ciekawą lekturę, ale zbytnie rozwodzenie się nad włożeniem danej implementacji do prawidłowej szufladki uważam za lekki przerost formy nad treścią) Niniejszy post zakłada, że Czytelnik jest za... [More]

Na początku przygody z Inversion of Control, a także dość długo później, moje wykorzystanie dostępnych kontenerów ograniczało się właściwie do ręcznego zarejestrowania wszystkich interfejsów, wszystkich interesujących mnie implementacji oraz zdefiniowaniu zależności w postaci parametrów konstruktora. Działało. Ostatnio korzystając z okazji postanowiłem podejść do problemu inaczej. Moim celem było zminimalizowanie czynności prowadzących do uzyskania żądanego efektu - "minimum friction devel... [More]

Ostatnio poznaję kontener DI Autofac i baaardzo mi się on podoba - nie tylko nazwa, funkcjonalność także. Ten post rozpoczyna paczkę kilku ciekawych (mam nadzieję:) ) postów pokazujących, jak przy pomocy Autofac zbudować "samoskładającą się" aplikację. Dzisiaj na dobry początek wrócimy do koncepcji, którą zerżnąłem od Udiego a przedstawiłem w poście Application Events (tam tez więcej linków w temacie samych zdarzeń). W opisanym przeze mnie sposobie mechanizm ten wymagał ręcznej rejestracji każd... [More]

W przykładzie z ostatniego posta wielu mogła nie podobać się następująca linijka: 1: string targetTimeZoneName = Config.TargetTimeZone; I mają rację, gdyż można by to zamodelować jako zależność konwertera od konfiguracji - najlepiej przez constructor injection. Ale przecież Automapper sam tworzy konwertery, resolwery, formatery i wszystkie inne szmery bajery (reklama Ery?)... HA! Nie było łatwo się do tego dokopać, ale poniższa instrukcja spowoduje, że wszystkie te "pomocnic... [More]

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śc... [More]