2011-04-18 277 views
14

我是新來的structureMap。如何使用流利配置爲以下類定義構造函數參數?由於StructureMap構造函數參數

public BlobContainer(CloudStorageAccount account 
       , string containerName 
       , string contentType 
       , BlobContainerPermissions blobContainerPermissions) 
    { 

    } 

回答

3
 For<BlobContainer>() 
      .HybridHttpOrThreadLocalScoped() 
      .Use<BlobContainer>() 
      .Ctor<CloudStorageAccount >("account").Is(...) 
      .Ctor<string >("containerName").Is(...) 
      .Ctor<string >("contentType").Is(...) 
      .Ctor<BlobContainerPermissions >("blobContainerPermissions").Is(...); 
18

對於基本類型,@ozczecho回答您會去:

For<BlobContainer>() 
    .Use<BlobContainer>() 
    .Ctor<string>("containerName").Is("theContainerName") 
    .Ctor<string>("contentType").Is("theContentType"); 

提供的值在報名時間知道。對於非基元類型,您也可以這樣做,但是您失去了容器以這種方式爲您提供的靈活性。最好定義一個默認實例或命名實例,然後使用它(容器會自動爲你解析默認實例)。通過定義默認值,您可以輕鬆地通過更改一個註冊表來更改應用程序中所有類型的依賴關係。

For<CloudStorageAccount>().Use<TheCloudStorageAccountType>(); 

如果相關性是一個具體類型與具有已知structuremap你沒有與容器註冊它依賴一個構造函數,它會自動解決。

因此,如果CloudStorageAccount是一個具體的類,您只需要在結構圖中註冊它的依賴關係。

+0

對不起,PHeiberg,我無意中點擊了投票..現在無法撤消我的行動。 – ozczecho 2011-11-16 01:23:21

+0

@PHeiberg:如果我需要BlobContainer實例在不同的地方,但每個地方我需要不同的構造函數的參數,如果參數在註冊時間不知道我怎麼能提供它? – Naor 2012-07-18 19:43:33

+0

@Naor:然後你必須註冊一個BlobContainerFactory(一個知道如何用正確參數構造一個BlobContainer的類)或一個Func (它可以訪問創建容器所需的上下文)。 – PHeiberg 2012-07-21 10:03:06