Свойства динамического набора StructureMap согласно HttpRequest - PullRequest
2 голосов
/ 26 июня 2010

Конфигурация StructureMap

Есть ли в SM способ динамически вводить значение свойства только на время запроса, а затем устанавливать его обратно в значение по умолчанию после завершения запроса?

Я специально ссылаюсь на контекст HttpRequest.

У меня есть интерфейс IDBAccessor и конкретная реализация DBAccessor.

IDBAccessor имеет открытое свойство для строки подключения.

Я хочу установить строку подключения динамически для каждого запроса HttpRequest в зависимости от какого-либо переданного параметра.

Легко ли это сделать?

Спасибо за ввод.

1 Ответ

0 голосов
/ 10 августа 2011

Я предполагаю, что у вас есть класс, который инкапсулирует логику для определения строки подключения для каждого запроса.Я назову это ConnectionStringSource.Затем вы можете настроить StructureMap следующим образом:

ObjectFactory.Initialize(x =>
{
    x.For<IDBAccessor>().HybridHttpOrThreadLocalScoped()
        .Use(ctx =>
        {
            var connectionString = ctx.GetInstance<ConnectionStringSource>().GetConnectionString();
            var dbAccessor = new DBAccessor {ConnectionString = connectionString};
            return dbAccessor;
        });
});

public class ConnectionStringSource
{
    public string GetConnectionString()
    {
        // determine the connection string somehow
        return "connection string";
    }
}

Вызов HybridHttpOrThreadLocalScoped обеспечит получение нового экземпляра DBAccessor для каждого HTTP-запроса.А используя перегрузку Func<> Use(), вы можете выполнить код для определения и установки строки подключения во время каждого запроса.

Примечание. Возможно, вы захотите просто сделать строку подключенияпараметр конструктора DBAccessor вместо присвоения ему свойства интерфейса.

...