C# 具有两个接口的Prism 7单体

C# 具有两个接口的Prism 7单体,c#,prism,C#,Prism,我正在看Prism 7中引入的容器抽象,我不确定如何用两个接口注册一个单例 来自unity背景,我首先注册单例(没有接口),然后注册两个接口(不是单例): containerRegistry.RegisterSingleton(); containerRegistry.Register(); containerRegistry.Register(); 这很好,因为我的容器是unity。但它是否也适用于其他容器 Prism 7提供的容器抽象行为是否有任何可用的规范?Prism 7容器抽象非常简单

我正在看Prism 7中引入的容器抽象,我不确定如何用两个接口注册一个单例

来自unity背景,我首先注册单例(没有接口),然后注册两个接口(不是单例):

containerRegistry.RegisterSingleton();
containerRegistry.Register();
containerRegistry.Register();
这很好,因为我的容器是unity。但它是否也适用于其他容器


Prism 7提供的容器抽象行为是否有任何可用的规范?

Prism 7容器抽象非常简单,旨在处理大多数但不是所有的注册需求。对于更复杂的场景,您需要使用扩展方法
GetContainer()
获取容器,如下所示:

containerRegistry.GetContainer().RegisterType<FactoryController>(new ContainerControlledLifetimeManager());
containerRegistry.GetContainer().RegisterType<IFactoryController>(new InjectionFactory(c => c.Resolve<FactoryController>()));
containerRegistry.GetContainer().RegisterType<IFactoryToken>(new InjectionFactory(c => c.Resolve<FactoryController>()));
containerRegistry.GetContainer().RegisterType(新的ContainerControlledLifetimeManager());
containerRegistry.GetContainer().RegisterType(新注入工厂(c=>c.Resolve());
containerRegistry.GetContainer().RegisterType(新注入工厂(c=>c.Resolve());

我怀疑这样的事情。遗憾的是,用户完全可以看到这种抽象。虽然我理解库必须支持不同容器的好处,但它使应用程序变得复杂,即使应用程序只想使用它的容器。事实上,抽象层使大多数开发人员受益。可悲的现实是,大多数开发人员从来没有费心去学习或理解太多关于依赖注入或他们正在使用的容器的东西。结果是,Prism团队只剩下试图支持特定于容器的开发人员问题。这降低了跨容器创建一致API的门槛,使您需要注册的内容达到95%以上,这也为编写可跨应用程序使用的模块打开了大门,即使这些应用程序使用不同的DI容器。现在,如果您觉得需要添加这样的特定API,欢迎您提出问题在吉丹。如果我尝试使用此代码,Prism 7.1.0.431版会引发StackOverflow异常。@Jinjinov唯一可能引发StackOverflowException的是Unity而不是Prism,我在Prism 7.1/Unity中使用了它,因此您的代码中一定有导致此问题的东西。
containerRegistry.GetContainer().RegisterType<FactoryController>(new ContainerControlledLifetimeManager());
containerRegistry.GetContainer().RegisterType<IFactoryController>(new InjectionFactory(c => c.Resolve<FactoryController>()));
containerRegistry.GetContainer().RegisterType<IFactoryToken>(new InjectionFactory(c => c.Resolve<FactoryController>()));