Nazwane wystąpienia i domyślna instancja w StructureMap?

W moim kodzie startowym StructureMap używam niestandardowej konwencji do skanowania zespołów i dodawania par interfejsu / implementacji do wykresu obiektu jako nazwanych instancji. Zasadniczo mam pewną logikę, która sprawdza ustawienia konfiguracji i ćwiczy do tej instrukcji w zależności od różnych warunków:

registry.For(interfaceType).Use(type)
    .Named(implementationName);

Powoduje to dodanie wszystkich nazwanych wystąpień. Jednak chciałbym także 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, czy nie, zawsze jest domyślna.

Próbowałem różnych kombinacji płynnego API, w tym:

registry.For(interfaceType).Add(type);

lub:

registry.For(interfaceType).Use(type);

Nawet niektóre z nich są oznaczone jako przestarzałe. Ale wynikłe zachowanie jest zawsze takie, że ostatni jest domyślny. Jeśli więc kolejność dodawania implementacji jest następująca:

Do interfejsu Logger użyj implementacji Log4Net o nazwie „Log4Net”Dla interfejsu Logger domyślnie użyj implementacji Log4NetDo interfejsu Logger użyj implementacji Mock o nazwie „Mock”

Wynika to z tego, że implementacja „Mock” ​​jest używana jako domyślna, gdy nie podano nazwy. Debugowanie doAllInstances w pojemniku widzę w następującej kolejności:

Instancja programu rejestrującego Log4Net o nazwie „Log4Net”Instancja programu rejestrującego Log4Net z identyfikatorem GUID nazwy (jak każda inna domyślna instancja, o ile wiem)Instancja programu Mock Logger o nazwie „Mock”

Debugowanie do instrukcji rejestrowania po wywołaniu z kontenera bez nazwy instancji powoduje jednak, że używana jest implementacja makiety.

Czy istnieje sposób na dodanie domyślnej instancji do wykresu obiektu, a jednocześnie możliwość dodawania nazwanych wystąpień?

questionAnswers(1)

yourAnswerToTheQuestion