问题描述
在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容器抽象。现在,通过IContainerProvider
和IContainerRegistry
接口与容器进行交互。IContainerProvider
接口用于从容器解析服务。IContainerRegistry
用于向容器注册类型。
但是,通用容器接口无法提供受支持容器的所有单个功能的超集。不过,您仍然可以使用GetContainer
方法访问基础容器以利用其所有功能。
可以通过使用
GetContainer()
和IContainerRegistry
接口之外的IContainerProvider
扩展方法来访问实际的DI容器。
因此,在您的示例中,可以对基础容器使用与以前相同的代码:
containerRegistry.GetContainer().RegisterType(typeof(IRepository<>),typeof(Data.RepositoryBase<>),new InjectionConstructor(path));