Аргументы конструктора StructureMap - PullRequest
15 голосов
/ 18 апреля 2011

Я новичок в StructureMap. Как определить аргументы конструктора для следующего класса с быстрой конфигурацией? Спасибо

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

  }

Ответы [ 2 ]

19 голосов
/ 18 апреля 2011

Для примитивных типов вы бы поступили так: @ozczecho ответил:

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

при условии, что значения известны во время регистрации. Вы можете сделать это таким образом и для не примитивных типов, но вы потеряете гибкость, которую контейнер дает вам таким образом. Лучше определить экземпляр по умолчанию или именованный экземпляр и использовать его вместо этого (контейнер автоматически разрешит экземпляры по умолчанию для вас). Определив значения по умолчанию, вы можете легко изменить все зависимости от типа в вашем приложении, изменив только одну регистрацию.

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

Если зависимость - это конкретный тип с конструктором, имеющим зависимости, которые известны структурной карте, вам не нужно регистрировать ее в контейнере, она будет автоматически разрешена.

Так что, если CloudStorageAccount является конкретным классом, вам нужно только зарегистрировать его зависимости в Структурной карте.

3 голосов
/ 18 апреля 2011
        For<BlobContainer>()
            .HybridHttpOrThreadLocalScoped()
            .Use<BlobContainer>()
            .Ctor<CloudStorageAccount >("account").Is(...)
            .Ctor<string >("containerName").Is(...)
            .Ctor<string >("contentType").Is(...)
            .Ctor<BlobContainerPermissions >("blobContainerPermissions").Is(...);
...