C# 使用模板10的依赖注入

C# 使用模板10的依赖注入,c#,dependency-injection,unity-container,template10,C#,Dependency Injection,Unity Container,Template10,我正在尝试将一些代码从使用Prism/Unity开发的旧Windows 8.1应用程序迁移到使用模板10和Unity的新UWP应用程序。我在模板10的文档中看到,您可以重写ResolveForPage方法 在我以前的Windows 8.1应用程序中,Prism中有一个Resolve方法,我将覆盖它,如下所示: protected override object Resolve(Type type) { return Container.Resolve(type); } 模板10方法的签

我正在尝试将一些代码从使用Prism/Unity开发的旧Windows 8.1应用程序迁移到使用模板10和Unity的新UWP应用程序。我在模板10的文档中看到,您可以
重写
ResolveForPage
方法

在我以前的Windows 8.1应用程序中,Prism中有一个
Resolve
方法,我将
覆盖它,如下所示:

protected override object Resolve(Type type)
{
    return Container.Resolve(type);
}
模板10方法的签名为

public override INavigable ResolveForPage(Page page, NavigationService navigationService)
所以我不确定如何转换这个。我已在我的
App.xaml.cs
中的
OnInitializeAsync
中注册了我的存储库,如下所示:

Container.RegisterType<IPayeesRepository, PayeesRepository>(new ContainerControlledLifetimeManager());
但这也不行。似乎没有实例化
ipayesrepository
,但我不太确定。在我的Windows 8.1应用程序中,它从未被显式实例化,因此我感觉它与没有重写
Resolve
方法有关。

我让它工作了(但在我的情况下,我有另一个问题,我稍后会提到,可能也会在非常安静的时间提及)

一方面,指导我用ViewModel的DI解决这个问题

在App.xaml.cs中:

public override async Task OnStartAsync(StartKind startKind, IActivatedEventArgs args)
{
    // long-running startup tasks go here
    AppController.Initialize();
    await Task.CompletedTask;
}
public override INavigable ResolveForPage(Page page, NavigationService navigationService)
{
    if (page is MainPage)
    {
        return SimpleIoc.Default.GetInstance<MainPageViewModel>();
        //(AppController.UnityContainer as UnityContainer).Resolve<INavigable>();
    }
    else
        return base.ResolveForPage(page, navigationService);
}
AppController是我配置应用程序的地方,包括容器

接下来,在App.xaml.cs中:

public override async Task OnStartAsync(StartKind startKind, IActivatedEventArgs args)
{
    // long-running startup tasks go here
    AppController.Initialize();
    await Task.CompletedTask;
}
public override INavigable ResolveForPage(Page page, NavigationService navigationService)
{
    if (page is MainPage)
    {
        return SimpleIoc.Default.GetInstance<MainPageViewModel>();
        //(AppController.UnityContainer as UnityContainer).Resolve<INavigable>();
    }
    else
        return base.ResolveForPage(page, navigationService);
}
在VM上注入依赖项:

public MainPageViewModel(IShapeService shapeService)
{     
   // this is just a POC            
}
就这些,它应该对你有用

用同样的信息在一段时间内。。。另外,让您知道,我使用Unity和MVVMLight.SimpleIoC实现了同样的结果,System.PlatformNotSupportedException因为IShapeService实际上是PCL库中的WCF代理,我必须重构它,因为我刚刚意识到UWP不支持配置文件(lol!)


我希望它能帮助您并节省您的时间。

dub stylee,我目前正在处理相同的问题,我不得不说,关于此ResolveForPage方法,缺少示例。。。如果我找到解决办法,我会告诉你的。