Динамические конфиги с Structuremap - PullRequest
0 голосов
/ 25 ноября 2011

Вот что я пытаюсь выполнить с помощью Structuremap.


При каждом запросе строки подключения к базе данных и URL-адреса веб-служб, используемые в наших клиентах, будут различаться в зависимости от бизнес-логики.В настоящее время наши клиентские реализации sql и веб-служб получают конфиги в своих конструкторах.

Я хотел использовать профили, только чтобы обнаружить, что их нельзя использовать для запроса.

В нашемВ нашей команде мы обсуждаем два решения:


1- Передайте фабрику конфигурации в реестр, которая может решить, какие конфигурации использовать, когда контейнеру необходимо создать экземпляр чего-либо.

  • Проблемы, которые я вижу, заключаются в том, что нам, возможно, придется использовать HttpContext.Items, поскольку большинство объектов приложения не создаются в структурной карте, и кажется, что трудно получить текущий контекст запроса изнутри фабрики.


2- Создайте контейнеры для каждой конфигурации и определите, какой контейнер использовать в зависимости от бизнес-логики.

  • Проблемы, которые я вижу, это время загрузки,потребление памяти и, возможно, жизненные циклы объектов.Таким образом, я не вижу здесь никакой реальной проблемы, просто мне кажется неправильным иметь несколько контейнеров.



1 - Вы видите другие проблемы?

2 - Есть идея получше?

3 - Какую бы вы выбрали?


Спасибо

РЕДАКТИРОВАТЬ

, и кажется, что трудно получить текущий контекст запроса изнутри фабрики.

Я не имею в виду HttpContext, я имею в виду данные запроса.Для этого приложения это объект запроса wcf.

1 Ответ

0 голосов
/ 28 ноября 2011

кажется, что трудно получить текущий контекст запроса изнутри фабрики.

Не уверен, почему так кажется.Разве следующее не поможет?

 ObjectFactory.Configure(config => {
            config.For<HttpContextBase>()
                .Use(() => { return new HttpContextWrapper(HttpContext.Current); });
            config.For<Service>().Use<Service>();
        });
        var service = ObjectFactory.GetInstance<Service>();

 public class ConfigurationFactory
    {
        public ConfigurationFactory(System.Web.HttpContextBase context)
        {

        }
    }


    public class Service
    {
        public Service(ConfigurationFactory Configuration)
        {

        }
    }
...