2011-04-18 217 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