首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >棱镜+ Splat作为IOC

棱镜+ Splat作为IOC
EN

Stack Overflow用户
提问于 2019-02-06 16:10:56
回答 1查看 343关注 0票数 0

我以前曾使用DryIOC作为我的IOC,但我想尝试使用Splat作为我的IOC,是否可以将这两者结合起来?

我曾尝试创建一个继承IModuleLoginModule,因此在我的LoginModule类中包含以下内容:

代码语言:javascript
复制
public void OnInitialized(IContainerProvider containerProvider)
{
        Locator.CurrentMutable.RegisterLazySingleton(() => new ServiceEntityMapper(), typeof(IServiceEntityMapper));
        Locator.CurrentMutable.RegisterLazySingleton(() => new LoginAPIService(), typeof(ILoginAPIService));
        Locator.CurrentMutable.RegisterLazySingleton(() => new LoginManager(
        Locator.Current.GetService<IServiceEntityMapper>(),
        Locator.Current.GetService<ILoginAPIService>()), typeof(ILoginManager));
}

对于我的视图模型构造器,我有这个:

代码语言:javascript
复制
 public LoginViewModel(INavigationService navigationService, ILoginManager loginManager = null) : base(navigationService)
 {
        LoginManager = loginManager ?? Locator.Current.GetService<ILoginManager>();
 }

结果,每当我导航到页面时,我都会得到这个异常

代码语言:javascript
复制
{System.TypeLoadException: Could not resolve the signature of a virtual method
  at System.Lazy`1[T].CreateValue () [0x00081] in <fe08c003e91342eb83df1ca48302ddbb>:0 
  at System.Lazy`1[T].LazyInitValue () [0x00080] in <fe08c003e91342eb83df1ca48302ddbb>:0 
  at System.Lazy`1[T].get_Value () [0x0003a] in <fe08c003e91342eb83df1ca48302ddbb>:0 
  at Splat.DependencyResolverMixins+<>c__DisplayClass7_0.<RegisterLazySingleton>b__0 () [0x00000] in <89c762f12a12451a8970372dc9921547>:0 
  at Splat.ModernDependencyResolver.GetService (System.Type serviceType, System.String contract) [0x00032] in <89c762f12a12451a8970372dc9921547>:0 
  at Splat.DependencyResolverMixins.GetService[T] (Splat.IDependencyResolver resolver, System.String contract)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-02-07 01:16:39

据我所知,Splat是一个服务定位器,而不是一个实际的DI容器。也就是说,您当然不限于基本的Prism实现,因为提供这些实现是为了使其易于采用和入门。在您的案例中,我可能会建议您创建自己的IContainerExtension实现并继承PrismApplicationBase。

通过查看UnityDryIoc的实现,您可以发现在您的应用程序类中并没有太多的额外工作……这里有一个使用Grace DI Container的类似示例。请记住,自上次预览以来,已经添加了几个新的应用程序接口,并提出了一个突破性的更改,使IContainerRegistry具有流畅的应用程序接口。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54549095

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档