我正在尝试将一些代码从我使用Prism/Unity开发的旧Windows8.1应用程序迁移到一个使用模板10和Unity的新应用程序中。我在模板10 这里的文档中看到,您可以override ResolveForPage方法。
在我以前的Windows8.1应用程序中,有一个棱镜中的Resolve方法,我希望override这样做:
protected override object Resolve(Type type)
{
return Container.Resolve(type);
}模板10方法的签名是
public override INavigable ResolveForPage(Page page, NavigationService navigationService)所以我不太清楚该如何转换。我已经在OnInitializeAsync中在App.xaml.cs中注册了存储库,如下所示:
Container.RegisterType<IPayeesRepository, PayeesRepository>(new ContainerControlledLifetimeManager());其中Container是一个UnityContainer实例。我的问题是,当我试图在另一个页面上注入依赖项时,我会得到一个NullReferenceException,因为_payeesRepository是null。在我看来,没有调用带有依赖项注入的构造函数,如果删除默认构造函数,则会得到一个错误。有没有人得到团结与模板10的工作,可能有任何建议,我可能会错过什么?
我还尝试使用Dependency属性如下所示:
[Dependency]
private IPayeesRepository _payeesRepository { get; set; }但这也行不通。看起来IPayeesRepository只是没有被实例化,但我不太确定。在我的Windows8.1应用程序中,它从未被显式实例化,所以我觉得它与不覆盖Resolve方法有关。
发布于 2016-08-18 07:25:40
我让它发挥作用(但在我的例子中,我有另一个令人讨厌的问题,我稍后会提到,而且可能也是如此。)
一方面,对这个问题的回答引导我使用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;
}AppController是我配置应用程序的地方,包括容器。
接下来,在App.xaml.cs中:
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);
}但你也必须:
从页面XAML中删除<Page.DataContext>。从page.xaml.cs中删除构造函数,我的MainPage.xaml.cs如下所示
public sealed partial class MainPage : Page
{
MainPageViewModel _viewModel;
public MainPageViewModel ViewModel
{
get { return _viewModel ?? (_viewModel = (MainPageViewModel)DataContext); }
}
}注入VM上的依赖项:
public MainPageViewModel(IShapeService shapeService)
{
// this is just a POC
}仅此而已,它应该对你有用。
我更新了维基有同样的信息.另外,让您知道,我使它与团结和MVVMLight.SimpleIoC的结果相同,System.PlatformNotSupportedException由于IShapeService实际上是一个WCF代理,它位于一个PCL库中,我必须重构它,因为我刚刚意识到UWP不支持配置文件(lol!)
希望它能帮你节省时间。
https://stackoverflow.com/questions/38023604
复制相似问题