2015-08-28 35 views
1
public class StoreDetails 
{ 
    public int StoreId { get; set; } 
} 

我想爲Web API的每個請求創建一個StoreDetails實例。此實例將用作項目中各種其他類的依賴項。 此外,我想「STOREID」屬性的值設置爲HttpContext.Current.Request.Headers["StoreId"]如何使用用於Web API的Unity容器爲每個請求注入類型的實例

我使用統一的容器與下列庫的幫助: 團結3.5.1404.0 Unity.AspNet.WebApi 3.5.1404.0

我有以下方法註冊類型

public static void RegisterTypes(IUnityContainer container) 
    { 
     container.RegisterInstance<StoreDetails>(/* how to provide some method to inject required StoreId from HttpContext.Current.Request.Headers["StoreId"] per request */); 
    } 
+0

另請參閱此[答案](http://stackoverflow.com/a/25671643/1370166)。 – TylerOhlsen

回答

2

我想出瞭如何自己做到這一點。

public static void RegisterTypes(IUnityContainer container) 
    { 
     // Some other types registration . 

     container.RegisterType<StoreDetails>(
      //new PerResolveLifetimeManager(), 
      new InjectionFactory(c => { 
       int storeId; 
       if(int.TryParse(HttpContext.Current.Request.Headers["StoreId"], out storeId)) { 
        return new StoreDetails {StoreId = storeId}; 
       } 
       return null; 
      })); 
    } 
+1

這會創建一個實例,而不是每個HTTP請求,但是每次調用Unity容器來解析'StoreDetails'類型。這些實例中的每一個對於給定的HTTP請求將具有相同的「StoreId」值,但對象本身將是單獨的實例。這證明是否有問題取決於「StoreDetails」的功能以及它的使用方式。 – Snixtor

相關問題