Autofac - kilka pytań

Autofac - kilka pytań
JU
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 5046
0

Cześć, zacząłem bawić się Autofaciem. I mam kilka wątpliwości. Czy ktoś mógłby powiedzieć albo podlinkować odpowiedni kod?

Wszystko jest pięknie w najprostszych przypadkach, gdy rejestruję i tworzę (Resolve) obiekty w Main. Ale większe systemy tak nie działają. Obiekty muszą być tworzone w różnych miejscach. Wykorzystanie w nich metody Resolve skończy się ServiceLocatorem. Załóżmy, że mam jakąś klasę, która gdzieś tworzy jakieś obiekty:

Kopiuj
class MyClass
{
    public void DoWork()
    {
        IMyInterface aObj = Container.Resolve<IMyInterface>();
        aObj.DoSthElse();
    }
}

No i w tym momencie pobieram Container skądś. Jest to ServiceLocator. Jak to powinno być zrobione poprawnie? Załóżmy, że aObj też ma w sobie jakieś zależności, a ja bym chciał móc to wszystko ładnie przetestować.

MrBean Bean
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 117
0
Juhas napisał(a):

Cześć, zacząłem bawić się Autofaciem. I mam kilka wątpliwości. Czy ktoś mógłby powiedzieć albo podlinkować odpowiedni kod?

Wszystko jest pięknie w najprostszych przypadkach, gdy rejestruję i tworzę (Resolve) obiekty w Main. Ale większe systemy tak nie działają. Obiekty muszą być tworzone w różnych miejscach. Wykorzystanie w nich metody Resolve skończy się ServiceLocatorem. Załóżmy, że mam jakąś klasę, która gdzieś tworzy jakieś obiekty:

Kopiuj
class MyClass
{
    public void DoWork()
    {
        IMyInterface aObj = Container.Resolve<IMyInterface>();
        aObj.DoSthElse();
    }
}

No i w tym momencie pobieram Container skądś. Jest to ServiceLocator. Jak to powinno być zrobione poprawnie? Załóżmy, że aObj też ma w sobie jakieś zależności, a ja bym chciał móc to wszystko ładnie przetestować.

Wszystko pomieszałeś to nie działa jak typowa fabryka. Poczytaj o Inversion Of Control oraz Dependency Inversion sensie książkę przeczytaj.

title

To czerwone w środku to to co robisz
A to zielone to jak powinno być.

Może to ci coś rozjaśni
title

W niektórych przypadkach ServiceLocator się sprawdza. Ludzie którzy krzyczą że SL to antywzorzec najczęściej są ubodzy w wiedzę....

JU
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 5046
0

Wiem, czym jest DI i IoC. Twój post w ogóle nie odpowiada na moje pytanie. Mówisz, że SL się sprawdza. OK, nie przeczę, że w pewnych sytuacjach jest ok. Ale w innych utrudni chociażby testy jednostkowe.

Chodzi mi o to, że nie chcę tworzyć wszystkich klas i wszystkich zależności w entry poincie, bo to jest bez sensu. Więc czy powinienem używać Service Locatora, czy są jakieś inne, może bardziej poprawne drogi.

MrBean Bean
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 117
0

Chodzi mi o to, że nie chcę tworzyć wszystkich klas i wszystkich zależności w entry poincie, bo to jest bez sensu. Więc czy powinienem używać Service Locatora, czy są jakieś inne, może bardziej poprawne drogi.

...... To zależy o jakich zależnościach mówisz, przecież nie będziesz wstrzykiwał każdej encji albo logera.

Wiem, czym jest DI i IoC. Twój post w ogóle nie odpowiada na moje pytanie. Mówisz, że SL się sprawdza. OK, nie przeczę, że w pewnych sytuacjach jest ok. Ale w innych utrudni chociażby testy jednostkowe.

A jak przetestujesz to czy kontener działa?

somekind
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
2
Juhas napisał(a):

Chodzi mi o to, że nie chcę tworzyć wszystkich klas i wszystkich zależności w entry poincie, bo to jest bez sensu. Więc czy powinienem używać Service Locatora, czy są jakieś inne, może bardziej poprawne drogi.

Nie wiem, czy dobrze zrozumiałem Twój problem, ale generalnie każdy kontener dostarcza też paczki integrujące go z aplikacjami różnego typu (MVC, API, WPF, itd.).

SL
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Bydgoszcz
0

Co jest złego w dodawaniu wszystkich klas do kontenera w entry pointcie ?

MrBean Bean
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 117
0
Slepiec napisał(a):

Co jest złego w dodawaniu wszystkich klas do kontenera w entry pointcie ?

Ale o co ci chodzi? O to żeby wszystkie zarejestrować jako AsSelf czy jak? No i poco ?

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.