Как заменить устаревший метод Microsoft.Practices.Unity.Configuration.ContainerElement.Configure в моем решении Unity? - PullRequest
3 голосов
/ 11 января 2011

У меня есть приложение Unity, которое работает и работает отлично, но в настоящее время мы находимся в процессе очистки нашего кода, действуя на все предупреждения компиляции.

Я получаю предупреждение о следующем фрагменте кодаиз-за устаревшего метода Microsoft.Practices.Unity.Configuration.ContainerElement.Configure:

var map = new ExeConfigurationFileMap { ExeConfigFilename = GetConfigFolderForFile("unity.config") };
Configuration config = ConfigurationManager.OpenMappedExeConfiguration(map, ConfigurationUserLevel.None);
var section = (UnityConfigurationSection)config.GetSection(SectionName);

if (section != null)
{

    var container = new UnityContainer();

    foreach (ContainerElement containerElement in section.Containers)
    {
        containerElement.Configure(container);
    }

    Container = container; // Set the main container
}

Я хотел бы заменить его на метод UnityConfigurationSection.Configure, как предлагается, но не вижу, что они эквивалентныиз-за того, что он находится на разных уровнях иерархии объектов.

Я пытался:

var map = new ExeConfigurationFileMap { ExeConfigFilename = GetConfigFolderForFile("unity.config") };
Configuration config = ConfigurationManager.OpenMappedExeConfiguration(map, ConfigurationUserLevel.None);
var section = (UnityConfigurationSection)config.GetSection(SectionName);

if (section != null)
{
    IUnityContainer container = new UnityContainer();

    container = section.Configure(container);

    Container = container; // Set the main container
}

, но это падает с нулевыми ссылками.

Как мне обновитькод, чтобы исключить использование устаревшего метода?

Ответы [ 2 ]

1 голос
/ 22 марта 2011

Если раздел в конфигурации не имеет имени, он принимает его по умолчанию и вам не нужно указывать имя:

<containers>
  <container>
    <types>
      <type type="IObject" mapTo="Object" />
    </types>
  </container>
</containers>
1 голос
/ 11 января 2011

Мне удалось заставить это работать.Секрет заключался в использовании перегрузки метода Configure, который принимает имя контейнера для настройки каждого элемента контейнера:

foreach (ContainerElement containerElement in section.Containers)
{
    container = section.Configure(container, containerElement.Name);
}

Пока все выглядит так, как будто он делает то же, что и устаревший метод Container.Configure, -все работает как положено.

...