W kodzie bootstrapującym StructureMap używam niestandardowej konwencji do skanowania złożeń i dodawania par interfejsów/implementacji do wykresu obiektów jako nazwane instancje. Zasadniczo mam jakąś logikę, która sprawdza ustawienia konfiguracyjne i ćwiczenia do tego oświadczenia w zależności od różnych warunków:Nazwane wystąpienia i wystąpienie domyślne w strukturze?
registry.For(interfaceType).Use(type)
.Named(implementationName);
to dodaje wszystkich wymienionych przypadkach dobrze. Jednak chciałbym również dodać instancję domyślną w przypadku, gdy nazwa instancji nie jest określona. Jednak domyślna instancja nie zawsze jest ostatnią dodaną do wykresu. Czasami inne nazwane instancje są dodawane później podczas skanowania. Wydaje się jednak, że niezależnie od tego, która instancja zostanie dodana jako ostatnia, niezależnie od tego, czy jest ona nazwana, jest zawsze domyślna.
Próbowałem różnych kombinacji płynnego API, w tym:
registry.For(interfaceType).Add(type);
czyli
registry.For(interfaceType).Use(type);
Nawet niektóre z tych oznaczonych jako przestarzałe. Ale wynikowe zachowanie jest zawsze takie, że ostatnie jest domyślne. Więc jeśli kolejność dodawania wdrożeń jest coś takiego:
- W przypadku interfejsu Logger używać realizację log4net nazwie „log4net”
- W przypadku interfejsu Logger używać realizację log4net domyślnie
- W przypadku interfejsu Logger użyj implementacji Mock o nazwie "Mock"
Wynikające z tego zachowanie polega na tym, że implementacja "makiety" jest używana jako domyślna, gdy nie podano żadnej nazwy. Debugowanie w AllInstances
w pojemniku, widzę w następującej kolejności:
- Instancja rejestratorze log4net nazwie „log4net”
- Instancja rejestratorze log4net z GUID o nazwie (jak każdy inny Domyślnie instancji, o ile mogę powiedzieć)
- instancją Mock rejestratora o nazwie „Mock”
debugowanie w oświadczeniu rejestrowania przy nazwie z pojemnika bez nazwy instancji, jednak wyniki w Mock realizacji używane.
Czy istnieje sposób dodania domyślnej instancji do wykresu obiektu, gdy nadal można dodawać nazwane instancje?