【问题标题】:StructureMap Constructor argumentsStructureMap 构造函数参数
【发布时间】:2011-04-18 03:39:45
【问题描述】:

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

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

  }

【问题讨论】:

    标签: structuremap


    【解决方案1】:

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

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

    前提是这些值在注册时是已知的。您也可以对非原始类型执行此操作,但您会失去容器以这种方式为您提供的灵活性。最好定义一个默认或命名实例并使用它(容器会自动为您解析默认实例)。通过定义默认值,您只需更改一个注册即可轻松更改应用程序中某个类型的所有依赖项。

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

    如果依赖项是具体类型,其构造函数具有结构映射已知的依赖项,则无需将其注册到容器中,它将被自动解析。

    所以如果 CloudStorageAccount 是一个具体的类,你只需要在 Structure Map 中注册它的依赖即可。

    【讨论】:

    • 抱歉 PHeiberg,我不小心点击了反对票……现在无法撤消我的操作。
    • @PHeiberg:如果我在不同的地方需要 BlobContainer 的实例,但每个地方都需要不同的构造函数参数,如果在注册时不知道参数,我该如何提供?
    • @Naor: 然后你必须注册一个 BlobContainerFactory (一个知道如何用正确的参数构造一个 BlobContainer 的类),或者一个 Func (它可以访问创建所需的上下文容器)。
    • @PHeiberg:你有这样的例子吗?
    • @Naor:不是一个特定的链接或一段代码。最好根据您的具体情况提出一个新问题。
    【解决方案2】:
            For<BlobContainer>()
                .HybridHttpOrThreadLocalScoped()
                .Use<BlobContainer>()
                .Ctor<CloudStorageAccount >("account").Is(...)
                .Ctor<string >("containerName").Is(...)
                .Ctor<string >("contentType").Is(...)
                .Ctor<BlobContainerPermissions >("blobContainerPermissions").Is(...);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多