我假設你有一個封裝邏輯的類來確定每個請求的連接字符串。我會叫它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請求。通過使用Use()
的Func<>
過載,您可以執行代碼來確定並設置每個請求期間的連接字符串。
注意:您可能只想將連接字符串設置爲DBAccessor的構造函數參數,而不是使其成爲接口上的屬性。