从 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
...
统一容器的配置部分:
<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
...