Scrutor to sprytna biblioteka, która pozwala na automatyczną rejestrację zależności (dependency injection) dla kontenera IOC Microsoft.Extensions.DependencyInjection. Ideą biblioteki Scrutor jest skanowanie kodu źródłowego, np. assembly, celem automatycznej rejestracji zależności wedle zadanych przez nas reguł.
Rejestrowanie zależności poprzez system refleksji + Autofac modules
For couple last days, I worked on gifty to catch up a little bit. My primal task was to introduce JWT authentication to my microservices hosted by Nancy. That’s the topic for next post but today, I’ll describe the proper steps to fully integrate Nancy with Autofac and ASP.NET Core since it’s not that obvious (at least wasn’t for me) and took me way to much time to finally do it. So, I hope that this one will help you one way or another. Installing pa...
Daj się poznać 2017 2801 dni, 20 godzin, 54 minuty temu 78 źrodło rozwiń
~ Jarosław Stadnicki Mówili mi ludzie, czemu sam rejestrujesz zależności w autofacu, skoro można skorzystać z konwencji, sam wszystko rozpozna, wykryje co masz załadowane do pamięci i z tego rozkmini. Jak się domyślacie wpis ten wziął się stąd, że nie zawsze tak się dzieje. Otóż tak stworzona rejestracja czasem powoduje problemy: Problemy wygladają tak: None of the constructors found with ‚Autofac.Core.Activators.Reflection.DefaultConstructorFinder’ on type ‚IsThereAnyNews.Mvc.Controllers.HomeContr...
IoC piękna rzecz, spójrzmy jak dodać kontener IoC Autofac do aplikacji ASP.NET MVC. W tym celu pobieramy NuGetem paczki Autofac i Autofac.Mvc5. Ponieważ jest to projekt MVC5, konieczna jest instalacja Autofac.Mvc5, dzięki temu będziemy mogli ustawić DependencyResolver na ten z Autofaca. Następnie musimy skonfigorować nasz kontener. Przechodzimy do klasy Global.asax.cs gdzie dodajemy metodę ConfigureContainer. C# private void ConfigureContainer() { var builder = new ContainerBuild...
Jakiś czas temu pisałem o DI i IoC oraz o tym, że będę używał kontenera do automatycznego ładowania wielu modułów podczas startu aplikacji. Początkowo zrobiłem metodę ContainerWrapper.AutoRegister(), która iterowała po wszystkich bibliotekach związanych z SharpOfficem i rejestrowała odpowiednie klasy. Ale było to dość zagmatwane, więc postanowiłem trochę to uprzątnąć...
Daj się poznać 2016 3148 dni, 59 minut temu 85 źrodło rozwiń
Dzisiaj artykuł o wstrzykiwaniu zależności. Każda poważniejsza aplikacja w obiektowym języku programowania powinna implementować zasadę odwróconego sterowania (IoC), a jej poszczególne modułu powinny być luźno powiązane (loose coupling).
Sztuka programowania 3173 dni, 2 godziny, 2 minuty temu 872 źrodło rozwiń
Wstrzykiwanie zależności. Porównanie kontenerów IoC i wybór najlepszego do projektu WebAPI.
Daj się poznać 2016 3197 dni, 20 godzin, 25 minut temu 316 źrodło rozwiń
Wiadomo, że każdy projekcie są testy. W części z nich są testy jednostkowe, w innych są testy integracyjne, w innych testy programistyczne - programista klika i jak działa to działa, a w jeszcze innych test na produkcji u klienta razem z milionami użytkowników. Generalnie każdy jakieś test ma. Wiadomo jak jest w projektach komercyjnych, klient chce aplikację działająca, wykonaną z najnowszymi i najlepszymi technikami, najlepiej napisaną przez juniorów, bez testerów i PM...
Sztuka programowania 3523 dni, 15 godzin, 31 minut temu 284 źrodło rozwiń
When writing unit tests you repeatedly need to create the target object and all its dependencies. Whenever you modify constructor parameters list you need to modify your tests. Therefore maintaining tests with hard coded dependencies is painful and time consuming operation. AutoMock will create object where all its dependencies will be mocked and injected at run time.
Sztuka programowania 3578 dni, 1 godzinę, 21 minut temu 235 źrodło rozwiń
I would like to present a solution that will make it easier to work with any application logs and convenient way to help monitor the work of program. This solution is based on ILogCollector interface.
Sztuka programowania 3699 dni, 20 godzin, 2 minuty temu 217 źrodło rozwiń
Rozważmy przez chwilę scenariusz wysyłania wiadomości e-mail. A raczej tą część procesu, w której generowana jest treść. W tagu demo3-finish mamy taki interfejs: public interface IEmailService { void RegistrationEmail(string email, string link); } (https://github.com/maniserowicz/di-talk/blob/demo3-finish/src/app/EmailService.cs) Jego implementacja powinna zająć...
Sztuka programowania 3829 dni, 20 godzin, 59 minut temu 264 źrodło rozwiń
OK – mamy niektóre “odpowiedzialności” wyjęte do osobnych klas. Ale co dalej? Czy UsersController powinien sam, ot, tak sobie, tworzyć nowe instancje których aktualnie potrzebuje? Nie! Pójdę o krok dalej i powiem więcej: użycie słowa kluczowego “new” w kodzie aplikacji uznaję za anti-pattern. Howgh, rzekłem. Jeżeli klasa potrzebuje innej klasy do działania, to ta zależność powinna być jawnie wyeksponowana w kodzie. Najlepiej przez param...
Sztuka programowania 3836 dni, 17 godzin, 36 minut temu 212 źrodło rozwiń
W kwietniu na jednym z blogów poruszany był temat odwracania (inwersji) w kontekście tworzenia oprogramowania. Dotyczyło to takich zagadnień (pozwolę sobie na wstępie użyć ich angielskich nazw) jak Inversion of Control (w skrócie IoC) oraz Dependency Inversion Principle (DIP). Przy okazji tego drugiego odniesiono się też do Dependency Injection (DI), które ...
Sztuka programowania 3865 dni, 13 godzin, 10 minut temu 269 źrodło rozwiń
Z sobotę odbyła się łódzka konferencja GET.NET (o czym jeszcze napiszę), w trakcie której tuż przed moją, odbyła się prezentacja Procenta o Dependency Injection. Samo wystąpienie było świetne, a moją ciekawość podsyciła dodatkowo obietnica (powtórzona dwukrotnie) wyjaśnienia całego zamieszania wokół pojęć DI (Dependency Injecton i Inversion) oraz IoC. Jakie było moje rozczarowanie, gdy upragniony moment nadszedł, a Maciek skwitował wszystko zdaniem, że definicje nie są ważne. Oj wkurzyłam się… Pomyślała...
Sztuka programowania 3892 dni, 18 godzin, 44 minuty temu 413 źrodło rozwiń
Czyżbym wrócił do formy z blogiem? Niektórzy może pamiętają, a inni nie, ale walczę z takim tam sobie prywatnym projekcikiem. Otóż nastał tam etap refaktoringu i właśnie wtedy postanowiłem, że trzeba wreszcie przenieść rejestrację komponentów w IOC z kodu do configa. Używam Autofac, więc zerknełem w dokumentację i dociągnełem 'Autofac.Configuration' z NuGeta, jest to potrzebne aby móc grzebać z configu. Zaraz potem wziełem się do roboty,wycinek wygląda tak: Trzeba dodać informację o nowej sekcji: ...
Sztuka programowania 3950 dni, 1 minutę temu 153 źrodło rozwiń
Pokazany sposób tworzenia prostego kontenera IoC w C#.
Sztuka programowania 4039 dni, 2 godziny, 35 minut temu 899 źrodło rozwiń
Dzisiejszy wpis dotyczy wszystkich klas, jednak zostanie on zaprezentowany na przykładzie ViewModel znanego z MVVM. W moim projekcie używam MVVM i dlatego jest to dla mnie naturalne. W poście zaprezentuje bardzo sztuczne przykłady, dlatego proszę nie skupiać się na nazewnictwie czy na zaprezentowanej funkcjonalności. Przedstawiony problem jest jednak bardzo częsty w realnych projektach i sam mam\miałem z nim do czynienia w codziennej pracy. Powiedzmy, że napisaliśmy ViewModel prezentujący jakąś część ...
Sztuka programowania 4141 dni, 1 godzinę, 27 minut temu 284 źrodło rozwiń
Analizując problem z działaniem aplikacji w środowisku produkcyjnym, czasami przydałoby się mieć możliwość sprawdzanie jakie argumenty są przesyłane do wywoływanych metod, zwłaszcza, w przypadku aplikacji desktopowych, gdzie nie mamy dostępu do pełnego zbioru danych, na którym pracuje użytkownik i musimy opierać się jedynie na informacjach zawartych w logach. Rozwiązaniem tego problemu jest dołączenie interceptora do kontenera IoC, który przy wywołaniu metody zapisywałby informacje o przesłanych argument...
Pracując z WPFem/XAMLem wielokrotnie natrafiałem na kod tego typu (bindowanie ViewModel do DataContext): Jest to dość wygodne rozwiązanie w małych i średnich aplikacjach nie wykorzystujących zaawansowanych wzorców prezentacyjnych (MVP, MVVM itp). Jednak ma ono jedną, podstawową wadę. Specyfika XAML’a wymusza istnienie bezparametrowego konstruktora w WindowViewModel, przy użyciu którego będzie tworzony obiekt przypinany do DataContext. Tworzenie obiektów w XAM...