相当于 UnityContainer.AddNewExtension 的棱镜

Prism equivalent of UnityContainer.AddNewExtension

我们将一个 WPF 应用程序拆分为几个 C sharp 项目。我们的业务层还需要向容器注册一些服务对象。我们相信使用 Unity 做到这一点的方法是

 Container.RegisterType<ISomeClass,SomeClass>();

在业务层 C 锐库中,然后在主 UI 应用程序中

 UnityContainer.AddNewExtension<T>(); 

以上内容详见此处https://www.c-sharpcorner.com/article/dependency-injection-using-unity-resolve-dependency-of-dependencies/

如果我们使用 Prism,有哪些等效方法?具体来说,我们是 考虑在业务库中使用 Unity(而不是 Prism),以便我们可以将其移植到 Xamarin Mac 和 Linux。我们将仅在 WPF UI 应用程序项目中使用 Prism。这行得通吗?

谢谢

If we are using Prism what are the equivalent methods?

IContainerRegistry 中有一些方法,但它们的行为没有很好的记录("they do what the container's method they're wrapping does" 除外)并且它们只涵盖最常见的用例。

好消息是,您可以使用容器的 GetContainer 扩展方法取回容器:

using Prism.Unity.Ioc;

containerRegistry.GetContainer().AddExtension<TheNeatExtension>();

从技术上讲,Haukinger 的回答是正确的,因为您始终可以访问您需要的底层容器 when/if。但在这种情况下,它可能不是最好的方法。 Bootstrapper 和 PrismApplication 都有一个虚拟方法 CreateContainerExtension。这是 Prism.Unity 的作用:

// new UnityContainer() is created by default here...
return new UnityContainerExtension();

我建议您预先配置容器

protected override IContainerExtension CreateContainerExtension()
{
    var container = new UnityContainer();
    container.AddExtension<SomeExtension>();
    return new UnityContainerExtension(container);
}