#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");