从 PRISM 7 中的配置文件中检索统一容器类型注册

Retrieve unity container type registration from configuration file in 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>

类型在 App.xaml.cs 文件中注册:

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方法中的所需参数不匹配。编译器产生以下错误:

Error CS1503 Argument 1: cannot convert from 'Unity.IUnityContainer' to 'Microsoft.Practices.Unity.IUnityContainer'

问题:如何检索正确的容器实例以作为 Configure 方法的参数传递

P.s。 Whosebug 上已经有一个类似的问题 。但是,答案并未提供上述实例化问题的解决方案。

您正在使用不兼容的库。 UnityConfigurationSection 期望 Microsoft.Practices.Unity.IUnityContainer (来自旧的 unity 版本,最有可能是三件套),而 GetContainer 产生 Unity.IUnityContainer (来自相当新的 unity)。

您应该升级 Unity.Configuration 软件包或降级 Prism...