Autofac - kilka pytań

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:

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ć.

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:

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ę....

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.

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?

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.).

0

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

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 ?

1 użytkowników online, w tym zalogowanych: 0, gości: 1