To jest to, co chcę od DI kontenera:Które kontenera DI zaspokoi tę
public class Class
{
public Class(IDependency dependency, string data) { }
}
var obj = di.Resolve<Class>(() => new Class(null, "test"));
Ciekawostki:
- można rozwiązać zarówno zależność i danych w konstruktorze.
- Potrafi używać składni bezpiecznej do przesyłania parametrów konstruktora (dokładna składnia może być różna). Tak, mogę to zrobić samodzielnie, pobierając argumenty konstruktora z (Expression.Body jako NewExpression) - ale potrzebuję sposobu na wykrycie, które argumenty są zarejestrowane w kontenerze.
Innym ważnym wymaganiem jest to, że chciałbym, aby moje komponenty były automatycznie pobierane, tj. Nie chcę rejestrować klasy - chcę, aby IoC ją odebrał, ponieważ wie, jak rozwiązać problem niezależności.
Ponadto czasami może być przydatne wprowadzanie właściwości, ale jest to opcjonalne.
Pytanie dotyczy tak naprawdę kombinacji cech - posiadania wszystkich typów - bezpieczeństwa, parametrów, automatycznego odbioru ... Łatwo jest sprawdzić jedną funkcję, ale ich połączenie nie jest łatwe do zweryfikowania chyba że ktoś zna określony pojemnik i zna jego cechy. Tak więc pytanie.
Nie sądzę, że istnieje kontener obsługujący tego rodzaju składnię. Ale wiele (prawie wszystkie) kontenerów obsługuje jawne parametry kontenera, i prawdopodobnie z czystszą składnią. –
"Prawdopodobnie" nie jest odpowiedzią ... o ile wiem, mogę przekazać obiektową [] tablicę parametrów, ale oczywiście nie jest to bezpieczny typ ... Mogę zmienić kolejność parametrów i nie będę o tym wiedział aż do czasu wykonania . – queen3
Przez środek czyszczący rozumiałem, że nie musisz wyraźnie używać ctor w swoim kodzie, tak jak robisz to powyżej. Zamiast tego, co napisałeś, dlaczego nie: 'var obj = new Class (di.Resolve()," test ");'? –