我正在尝试在 Prism 7 中注册 DI 服务。我发现以下所有方法都有效,哪一个是正确的方法?各自的情况如何?
public class AndroidInitializer : IPlatformInitializer
{
static OpenAppService openAppService = new OpenAppService();
public void RegisterTypes(IContainerRegistry containerRegistry)
{
containerRegistry.RegisterInstance<IOpenAppService>(openAppService);
containerRegistry.Register<IFacebookLoginService, FacebookLoginService>();
containerRegistry.RegisterSingleton<IAppleSignInService, AppleSignInService>();
}
}
首先,这些方法的作用完全取决于所使用的实际容器,尤其是当您超越完全微不足道的事情时。这可能是没有这方面的文档的主要原因。
话虽如此...
-
Register
表示在注入给定接口时应使用给定服务,并且new将为每次注入创建实例。
-
RegisterSingleton
不同之处在于使用相同的实例all注射。
-
RegisterInstance
是相同的RegisterSingleton
,但你必须提供一个实例。
这是正确的方法吗?各自的情况如何?
因此,大多数时候服务都注册为单例,因为您希望视图模型能够通过服务进行通信。示例:EventAggregator
- 当一个视图模型发布事件时,您期望其他视图模型接收该事件,只有当他们使用与发布者发布的相同实例进行订阅时,才有可能实现这一点。不过,WCF 客户端不需要是单例,因为通信发生在服务器端。
您不想注册实例,因为这会混淆注册和解析,并且您必须绝对确保all在创建实例来注册实例时已经注册了实例的依赖项(通过调用Resolve
,这本身就带有一丝邪恶)。如果您在一种方法中注册所有内容,那么这不是一个问题,但如果您有多个(相互依赖的)模块,这会变得更加令人头痛。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)