Есть ли способ зарегистрировать один и тот же объект дважды в StructureMap?

У меня есть некоторые функции, которые я включаю в свое приложение .NET, которое использует StructureMap. Я хочу зарегистрировать функции для двух целей.

  • Отобразить текущее состояние all IFeatures на диагностической странице.
  • Используйте определенные экземпляры в конструкторах сервисов, которые полагаются на определенные реализации IFeature

Вот моя настройка. Мне интересно, правильно ли я это делаю? Есть ли лучший способ, которым я мог бы это сделать?

class HotNewFeature : IFeature { ... }

class ServiceThatUsesFeature 
{
    public ServiceThatUsesFeature(HotNewFeature hotNewFeature) { ... }
}

// Type registry setup
For().Singleton().Use();
For().Singleton().Add(c => c.GetInstance);
For().Singleton().Use());

// Get all instances on the diagnostics page:
IEnumerable features = ServiceLocator.Current.GetAllInstances();

Я ожидаю, что на диагностической странице features в этом случае будет содержать IEnumerable с одним элементом, экземпляр HotNewFeature .

1
nl ja de
Пожалуйста, уточните, в каких случаях вы ожидаете возвращения GetAllInstances.
добавлено автор Joshua Flanagan, источник

1 ответы

Используйте функцию Scan , чтобы зарегистрировать все типы, которые реализуют IFeature. Это удовлетворит вашу первую потребность, чтобы отобразить список на странице диагностики.

Если службе требуется определенная реализация, она должна объявить конкретный тип, который ему нужен ( HotNewFeature ) вместо интерфейса ( IFeature ) в конструкторе. Вы сделали это правильно в своем примере. В этот момент вам больше не нужно ничего делать в StructureMap. Если вы запросите ServiceThatUsersFeature из StructureMap и полагаетесь на конкретный класс ( HotNewFeature ), StructureMap будет знать, как создать экземпляр этого конкретного класса.

1
добавлено
Microsoft Stack Jobs
Microsoft Stack Jobs
1 788 участник(ов)

Work & freelance only Microsoft Stack. Feed https://t.me/Microsoftstackjobsfeed Чат про F#: @Fsharp_chat Чат про C#: @CSharpChat Чат про Xamarin: @xamarin_russia Чат общения:@dotnettalks

Microsoft Developer Community Chat
Microsoft Developer Community Chat
584 участник(ов)

Чат для разработчиков и системных администраторов Microsoft Developer Community. __________ Новостной канал: @msdevru __________ Баним за: оскорбления, мат, рекламу, флуд, флейм, спам, NSFW контент, а также большое количество оффтоп тем. @banofbot