Poniższy kod służy wyłącznie do celów demonstracyjnych.Castle Windsor IOC: Przekazywanie parametrów konstruktora do komponentów potomnych
Powiedzmy, że mam 2 komponenty (businessService i dataService) i klasę interfejsu użytkownika.
Klasa UI wymaga usługi biznesowej, businessService potrzebuje usługi dataService, a usługa dataService korzysta z metody connectionString.
Formularz klasa UI muszę rozwiązać usługi biznesowe, więc piszę poniższy kod:
var service = container.Resolve<BusinessService>(new { dependancy = "con string 123" }));
informuje, że Zależność jest parametrem konstruktora connectionString.
Ale powyższy kod nie działa, mówiąc, że usługa danych spodziewa się zależności, która nie była usatysfakcjonowana.
Nie można utworzyć komponent „dataService” ponieważ ma zależności być spełnione. dataService oczekuje na następujących zależności:
Klucze (komponenty z określonymi kluczami) - zależność, która nie została zarejestrowana.
Więc jako obejście Robię to:
var service = container.Resolve<BusinessService>(new { dataService = container.Resolve<IDataService>(new { dependancy = "123" }) });
Ale od projektowania, kodowania stylu i wielu perspektyw to nie jest dobry sposób to zrobić.
Proszę więc, jeśli możesz doradzić, dlaczego nie działa w prosty sposób lub masz lepsze obejście, prosimy o udostępnienie.
Czy możesz podać krótką, ale kompletną definicję BusinessService, DataService i dependancy/connectionString, która się nie powiedzie? Usuń dowolny kod, który nie przyczynia się bezpośrednio do odtworzenia problemu. –
Jest to prosta i bezpośrednia publiczna klasa –
BusinessService {public BusinessService (DataService dataService) {}} –