【发布时间】:2016-10-27 16:13:08
【问题描述】:
我正在尝试将一些代码从使用 Prism/Unity 开发的旧 Windows 8.1 应用程序迁移到使用模板 10 和 Unity 的新 UWP 应用程序。我在模板 10 here 的文档中看到,您可以使用 override ResolveForPage 方法。
在我的旧 Windows 8.1 应用程序中,Prism 中有一个 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。在我看来,没有调用具有依赖注入的构造函数,如果我删除默认构造函数,则会出现错误。有没有人让 Unity 使用模板 10,可能对我可能遗漏的内容有任何建议?
我也尝试过像这样使用Dependency 属性:
[Dependency]
private IPayeesRepository _payeesRepository { get; set; }
但这也不起作用。似乎IPayeesRepository 只是没有被实例化,但我不确定。在我的 Windows 8.1 应用程序中,它从未显式实例化,所以我觉得它与不覆盖 Resolve 方法有关。
【问题讨论】:
-
dub stylee,我目前正在处理同样的问题,我不得不说缺少关于此 ResolveForPage 方法的示例...如果我找到解决方案,我会让你知道。
标签: c# dependency-injection unity-container template10