带注入构造函数的Prism 8.0寄存器类型

问题描述

在Prism 6.2中,我注册了存储库类型,如下所示:

Container.RegisterType(typeof(IRepository<>),typeof(Data.RepositoryBase<>),new InjectionConstructor(path));

在更新为Prism 8时,我将上面的代码替换为:

containerRegistry.Register(typeof(IRepository<>),typeof(Data.RepositoryBase<>));

但是此方法不允许使用InjectionConstructor。如何在构造函数中传递存储库类所需的参数?

解决方法

Prism 7.1.0中,引入了一个容器抽象来统一实现。

添加了新的Prism.Ioc名称空间来处理DI容器抽象。现在,通过IContainerProviderIContainerRegistry接口与容器进行交互。 IContainerProvider接口用于从容器解析服务。 IContainerRegistry用于向容器注册类型。

但是,通用容器接口无法提供受支持容器的所有单个功能的超集。不过,您仍然可以使用GetContainer方法访问基础容器以利用其所有功能。

可以通过使用GetContainer()IContainerRegistry接口之外的IContainerProvider扩展方法来访问实际的DI容器。

因此,在您的示例中,可以对基础容器使用与以前相同的代码:

containerRegistry.GetContainer().RegisterType(typeof(IRepository<>),typeof(Data.RepositoryBase<>),new InjectionConstructor(path));