Czego nauczyłem się w 17 tygodniu pracy?

W tym tygodniu było jakoś mało programowania ale poczytałem sobie o kliku ciekawych rzeczach. Chyba to ten klimat zbliżającej się majówki sprawia, że jakoś mało tematów się nasuwa.

IndexedDB API

Szczerze się przyznaje, że nie wiedziałem o tym, że istnieje coś takiego jak bazy danych w przeglądarce. Może to służyć do obsługi aplikacji off-line lub do przechowywania dużej ilości danych po stronie klienta. Są dwie dostępne bazy IndexedDB i Web SQL. Pierwsza z nich to tak jak by baza dokumentowa(NoSql) a druga to baza relacyjna (SQL), aby korzystać z niej należy napisać konkretne polecenia do bazy SQL typu SELECT, INSERT itd.

Do każdej z tych baz istnieje oczywiście przyjazne api, które ułatwia komunikację i obsługę. Szczegóły dostępne tutaj: https://developer.mozilla.org/en-US/docs/Web/API/IndexedDB_API/Using_IndexedDB

Angular 7 – odświeżenie strony na IIS (Error 404)

Podczas odświeżenia strony (przycisk refresh), która stoi na serwerze IIS, każde zapytanie jest interpretowane jako dostęp do zasobu co powoduje, że gdy używamy aplikacji angularowej, która zmiana adres strony po stronie klienta, powoduje to, że przy odświeżeniu strony IIS szuka zasobu dostępnego pod danym adresem. To powoduje, że często (zależy to od konfiguracji) pojawia się błąd 404, bo routing angularowy to coś zupełnie nie zależnego od IIS-a

Aby rozwiązać ten problem mając aplikacje Angularową trzeba zmienić konfigurację IIS tak aby każde zapytanie kierował na adres główny – wtedy routing wpadnie do angulara i on sobie sam poradzi z przekierowaniem na odpowiednią stronę

To co powinno znaleźć się w web.config-u poniżej.

    <system .webServer>
	<rewrite>
    <rules> 
      <rule name="Main Rule" stopProcessing="true">
        <match url=".*"></match>
        <conditions logicalGrouping="MatchAll">
          <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true"></add>
          <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true"></add>
        </conditions>
        <action type="Rewrite" url="/"></action>
      </rule>
    </rules>
  </rewrite>
</system><system .webServer>

Responsywne obrazki w Boostrap-ie 4.0

Przydatna klasa w Boostrap-ie to szybkiego i wygodnego skalowania obrazków w ramach rodzica. Wystarczy dodać klasę “img-fluid” i voilà… obrazek się pięknie skaluje podczas zmieszania okna przegladarki. Oczywiście, klasę można używać z innymi znacznikami. Tak czy inaczej skalowanie, szczególnie jeśli chodzi o widok mobilny działa bardzo dobrze. Polecam ; )

Szczegóły dostępne tutaj: https://getbootstrap.com/docs/4.0/content/images/

Tworzenie kontrolera przez wstrzykiwanie zależności ASP .NET Core

Domyślnie nie da się wstrzyknąć swojej własnej instancji kontrolera przez wstrzykiwanie zależności. Czyli taki kod mimo, że jest poprawny i się kompiluje to nie stworzy instancji klasy kontrolera.

public void ConfigureServices(IServiceCollection services)
    {
        services.AddMvc();

        services.AddScoped<testservice>();
        services.AddTransient(ctx =>
            new HomeController(new TestService("Non-default value")));
    }

Aby jednak to zrobić należy najpierw przeczytać ten artykuł, który ładnie opisuje co się dzieje pod spodem, podczas tworzenia kontrolera i następnie można dodać ten kod i wszystko zacznie dobrze działać.

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddMvc()
                .AddControllersAsServices();

        services.AddScoped</testservice><testservice>();
        services.AddTransient(ctx =>
            new HomeController(new TestService("Non-default value")));
    }

W kodzie jest tylko jedna zmiana – dodanie metody “.AddControllersAsServices();” metoda ta pozwala na kontrolowanie tworzenia instancji kontrolera poprzez wstrzykiwanie zależności.