Mam app usług NET 3-tier, który jest zgodny ze standardowym podejściem:Wstrzykiwanie zależności w aplikacji n-warstwowej?
Frontend -> Object Model/Business Logic -> Data Access
Próbuję dowiedzieć się o wstrzykiwania zależności wzdłuż drogi, a do tej pory znalazłem to wielki (używając Autofac) . Każdy z 3 poziomów musi tworzyć zestaw obiektów, czasami z dodatkową konfiguracją/etc. Wygląda na to, że pojemnik DI powinien być idealnym rozwiązaniem, ale mam pewne problemy z tym, gdzie powinien on żyć w stosunku do reszty systemu.
Obecnie mam klasę w interfejsie, która konfiguruje kontener DI. Jest to po prostu wielka paczka kodu mówiącego: container.Register<SomeType>()
i tak dalej.
Problem polega na tym, że konfiguruje kontener dla wszystkich 3 poziomów, a zatem musi posiadać dość inwazyjną wiedzę na temat warstwy dostępu do danych. Posiadanie w moim interfejsie kodu z taką wiedzą uruchamia dzwonki alarmowe w mojej głowie, ponieważ punktem oddzielania aplikacji na poziomy jest unikanie tej dokładnej sytuacji.
Pogorsza się również fakt, że moja warstwa dostępu do danych to nie tylko serwer SQL, który jest głupim wiadrem bitów, ale składa się z wielu skomplikowanych wywołań COM Interop i P/Invoke, więc ma duży wpływ na konfiguracja DI.
Dałem trochę do myślenia, aby to zepsuć - być może mając jeden kontener na jeden poziom lub mając klasę "Setup" w każdej warstwie, która rozmawia z globalnym kontenerem DI, aby zarejestrować własne bity, ale nie jestem pewien jeśli to spowoduje więcej problemów niż rozwiązuje ...
Byłbym bardzo wdzięczny, gdyby ktokolwiek mógł podzielić się swoimi doświadczeniami w korzystaniu z DI z aplikacjami wielowarstwowymi.
Dzięki, Orion.
Czy masz coś, co przypomina warstwę usługi? Tak, aby twój front-end współdziałał z nim przed obiektami biznesowymi. – BuddyJoe
Nie jestem pewien, czy podążam za tym, co masz na myśli, mówiąc o "warstwie usługowej" ... "usługa" jest takim nadużywanym terminem ogólnym :-( –