MS dependency container i opcjonalne ładowanie parametrów

0

Cześć
Autofac ma fajna rzecz - opcjonalne ładowanie parametrów

np - mogę przeszukać pliki po typie, zarejestrować i wywołać z parametrem - jeśli istnieje

//autofac

Builder.RegisterAssemblyTypes(assemblies)
                .Where(t => typeof(T).IsAssignableFrom(t))
                .SingleInstance()
                .AsSelf()
                .WithParameter(new ResolvedParameter(
                    (pi, ctx) => pi.ParameterType == typeof(IMyService),
                    (pi, ctx) => ctx.ResolveOptional<IMyService>()
                    ));

czy można coś takiego osiągnąć stosując domyśly kontener od MS?

//MS Dependency Container
Builder.Scan(s =>
               s.FromAssemblies(assemblies)
                   .AddClasses(c => c.AssignableTo(typeof(T)))
                   .AsSelf()
                   .WithTransientLifetime()
                   );

Próbowałem coś w powyższym kodzie uskutecznić, ale nie udalo mi się, nie udało mi się także niczego znaleźć - z góry dziękuję za pomoc

5

Nie, DI od Microsoftu w zamyśle miał być uproszczony i przede wszystkim spełniać wymagania .Net Core. To co chcesz zrobić możesz ewentualnie osiągnąć rejestrując fabrykę, i w niej wybiórczo rozwiązywać zależności na podstawie tego czy są wymagane czy nie (GetService vs GetRequiredService).

Tak na marginesie- od początku kiedy wyszedł Core to używam ich frameworka DI i jeszcze nigdy nie miałem potrzeby żeby wracać do czegoś z bogatszą funkcjalnością. Często to co chcemy "magicznie" osiągnąć za pomocą frameworków DI jest przejawem tego że coś mamy nie tak zamodelowane w naszym kodzie, a stosując takie obejścia leczymy objaw a nie chorobę.

0
jakubek napisał(a):

czy można coś takiego osiągnąć stosując domyśly kontener od MS?

To jest upośledzone g**no, nie korzystaj z tego. Lepiej od razu użyć dojrzałego rozwiązania.

0

Wygląda że próbujesz tutaj bardziej zrobić dynamiczne rozszerzenia aplikacji, niż standardowy DI
Do rozszerzeń microsoft ma osobny projekt - MEF - pozwala na wyszukiwanie dll'ek, wyszukiwanie typów po parametrach i ich wzajemne wstrzykiwanie do parametrów konstruktora jeśli poproszą o taki import, można to połączyć z wbudowanym dependency containerem

https://medium.com/@mailbox.viksharma/resolve-dependencies-using-mef-and-built-in-ioc-container-of-asp-net-core-aae198cd38b6

0
somekind napisał(a):
jakubek napisał(a):

czy można coś takiego osiągnąć stosując domyśly kontener od MS?

To jest upośledzone g**no, nie korzystaj z tego. Lepiej od razu użyć dojrzałego rozwiązania.

Nie wiem czy coś się zmieniło w wersji 3.x, pracowałem z tym w .net core 2.2.
Jedyne czego mi brakowało to skanowanie paczek do rejestracji zależności przez implementowane interfejsy. Dodałem jako zależność Scrutor i nie brakowało mi już niczego. Narzędzie robi to co miało robić w prawidłowy sposób i na pewno nie określiłbym go jako g**no.
Jeśli była potrzeba zrobienia czegoś niestandardowego to wystarczyło zarejestrować fabrykę jak już napisał @Aventus.

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