2010-06-25 41 views
2

StructureMap配置StructureMap組動態特性的HttpRequest

是否有SM的方式動態地注入屬性值僅適用於請求的時間,然後設置這些屬性恢復爲默認的請求完成後?

我特指HttpRequest上下文。

我有一個IDBAccessor接口和一個DBAccessor具體實現。

IDBAccessor具有連接字符串的公共屬性。

我想這取決於一些參數傳遞進來。

動態設置的ConnectionString每個HttpRequest對象有一個簡單的做到這一點?

感謝您的意見。

回答

0

我假設你有一個封裝邏輯的類來確定每個請求的連接字符串。我會叫它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的構造函數參數,而不是使其成爲接口上的屬性。