Я предполагаю, что у вас есть класс, который инкапсулирует логику для определения строки подключения для каждого запроса.Я назову это 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 вместо присвоения ему свойства интерфейса.