Правила карты структуры для разных пространств имен

#c# #structuremap

#c# #structuremap

Вопрос:

Мой сценарий таков:

Две разные части (ASP.NET Области MVC) моего проекта нуждаются в том же внедрении конструктора, что и Singleton, но разные экземпляры настраиваются немного по-разному.

Например.

Область сайта = его собственный синглтон

Область администратора = собственный синглтон

Можно ли этого достичь с помощью StructureMap? Части проекта находятся в разных пространствах имен.

Комментарии:

1. Я не уверен, что понял ваш вопрос. Действительно ли области сайта нужна SomeDependency, а администратору нужен другой тип SomeDependency, и обе SomeDependency должны быть одиночными? Или дело в том, что область сайта и область администратора являются одиночными элементами и нуждаются в той же зависимости, что и синглтон?

2. Первое. Администратору и сайту нужна разная зависимость SomeDependency как одиночным элементам.

Ответ №1:

Вы можете сделать это, если вы создадите один синглтон по умолчанию, а другой — именованный экземпляр. И в тех местах, где вам нужен именованный экземпляр, вы сопоставляете свои зависимости, чтобы использовать именованный экземпляр вместо стандартного.

 Container container = new Container(x => {
      x.For<ISomeDependency>().Singleton().Use<SomeDependency>(); // User
      x.For<ISomeDependency>().Singleton().Add<SomeDependency>().Named("admin");
});
  

В приведенном выше примере «Использовать<>» обозначает значение по умолчанию, в то время как «Добавить<>» добавляет именованный экземпляр.

Это вернет вам значение по умолчанию:

 container.GetInstance<ISomeDependency>();
  

В то время как это приведет к получению вашего именованного экземпляра:

 container.GetInstance<ISomeDependency>("admin");