相当于 UnityContainer.AddNewExtension 的棱镜
Prism equivalent of UnityContainer.AddNewExtension
我们将一个 WPF 应用程序拆分为几个 C sharp 项目。我们的业务层还需要向容器注册一些服务对象。我们相信使用 Unity 做到这一点的方法是
Container.RegisterType<ISomeClass,SomeClass>();
在业务层 C 锐库中,然后在主 UI 应用程序中
UnityContainer.AddNewExtension<T>();
如果我们使用 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);
}
我们将一个 WPF 应用程序拆分为几个 C sharp 项目。我们的业务层还需要向容器注册一些服务对象。我们相信使用 Unity 做到这一点的方法是
Container.RegisterType<ISomeClass,SomeClass>();
在业务层 C 锐库中,然后在主 UI 应用程序中
UnityContainer.AddNewExtension<T>();
如果我们使用 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);
}