StructureMap构造函数参数

15

我是StructureMap的新手。如何使用流畅配置为以下类定义构造函数参数?谢谢。

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

  }
2个回答

19

对于原始类型,您可以按照@ozczecho的回答方式进行:

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

只要在注册时知道值,就可以这样做。对于非原始类型也可以这样做,但这样会失去容器提供的灵活性。最好定义一个默认或命名实例并使用它(容器将自动为您解析默认实例)。通过定义默认值,您可以通过更改一个注册表来轻松更改应用程序中某个类型的所有依赖项。

For<CloudStorageAccount>().Use<TheCloudStorageAccountType>();
如果一个依赖是具体类型,其构造函数有依赖关系,这些依赖关系已知于StructureMap,则无需在容器中注册它,它将自动解析。
因此,如果CloudStorageAccount是具体类,则只需要在Structure Map中注册其依赖项。

抱歉PHeiberg,我不小心点击了“踩”按钮,现在无法撤销我的操作。 - ozczecho
如果我需要在不同的地方使用BlobContainer实例,但每个地方我需要不同的构造函数参数,如果在注册时不知道参数,我该如何提供它? @PHeiberg - Naor
@Naor:那么您需要注册一个BlobContainerFactory(一种知道如何使用正确参数构造BlobContainer的类),或者一个Func<BlobContainer>(它可以访问创建容器所需的上下文)。 - PHeiberg
@PHeiberg:你有这方面的例子吗? - Naor
@Naor:没有具体的链接或代码。最好您提出一个新问题,说明您的具体情况。 - PHeiberg

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接