Получить регистрацию типа контейнера единства из файла конфигурации в PRISM 7

Раздел конфигурации для контейнера единства:

<unity xmlns="http://schemas.microsoft.com/practices/2010/unity">
<container>
  <register type="IProductInfo, Core.Interface" mapTo="Classes.ProductInfo, Core">
    <constructor>
      <param name="Name" value="Product Name" />
      <param name="Version" value="V1.2.65.30865" />
    </constructor>
  </register>
</container>

The types are registered in the App.xaml.cs file:

public partial class App : PrismApplication
{
    protected override void RegisterTypes(IContainerRegistry containerRegistry)
    {
      var config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
      UnityConfigurationSection section = (UnityConfigurationSection)config.GetSection("unity");
      section?.Configure(containerRegistry.GetContainer());
    }  
}

Однако из-за абстракции контейнера, встроенной в версию PRISM 7, экземпляр контейнера не соответствует требуемому параметру в методе Configure. Компилятор выдает следующую ошибку:

Ошибка CS1503. Аргумент 1: невозможно преобразовать из «Unity.IUnityContainer» в «Microsoft.Practices.Unity.IUnityContainer».

Вопрос. Как получить правильный экземпляр контейнера для передачи в качестве параметра метода Configure

P.S. Подобный вопрос уже есть по той же проблеме в StackOverflow. Однако ответ не дает решения проблемы создания экземпляров, описанной выше.


person Danila Kireev    schedule 09.06.2020    source источник


Ответы (1)


Вы используете несовместимые библиотеки. UnityConfigurationSection ожидает Microsoft.Practices.Unity.IUnityContainer (из старой версии единства, скорее всего, тройной), а GetContainer выдает Unity.IUnityContainer (из довольно недавнего единства).

Вы должны либо обновить свой пакет Unity.Configuration, либо понизить версию Prism...

person Haukinger    schedule 09.06.2020
comment
Спасибо за предоставленный ответ. Просто краткое уведомление (возможно, вы захотите добавить это в свой ответ для полноты). Только установка раздела Unity.Configuration по-прежнему приводит к конфликту с пространством имен Microsoft.Practices.Unity.Configuration. Чтобы сделать его совместимым с новейшей версией платформы PRISM, необходимо обновить/установить следующие три пакета NuGet: Unity, Unity.Abstractions, Unity.Configuration. - person Danila Kireev; 10.06.2020