試圖在Prism.Forms中構建對DryIoc的支持(https://github.com/joacar/Prism/tree/pr-517),並偶然發現了一個場景,我無法設法解決該如何操作。DryIoc - 使用密鑰名稱註冊基類時解決dervied類
爲了長話短說,這些問題歸結爲:在Prism.DryIoc.Forms中創建新應用程序時,將創建PrismApplicationBase的應用程序子類並覆蓋某些方法,其中之一是RegisterTypes。
調用時,用戶可以在導航類DryIocPageNavigationService
介入導航
container.RegisterPageForNavigation<MockView>();
// Extension method implementation
public static void RegisterPageForNavigation<TPage>(this IContainer container)
where TPage : Xamarin.Forms.Page
{
container.Register<TPage>(typeof(TPage).FullName);
}
註冊一個視圖,並有一個方法重寫protected Page CreatePage(string name) { ... }
這裏談到的問題:在這個時候,我們才知道解決給定的「名字」使用的IContainer的Page
的實現。
protected Page CreatePage(string name)
{
// Always returns null
return _container.Resolve<Page>(name, IfUnresolved.DefaultOrNull);
}
然而,如果實施該擴展方法以這樣的方式
public static void RegisterPageForNavigation<TPage>(this IContainer container)
where TPage : Xamarin.Forms.Page, new()
{
container.Register<Page>(made:
Made.Of(() => new TPage()),serviceKey:typeof(TPage).FullName);
}
的頁面得到解決。然而,這限制了TPage
有默認的空構造函數(或做一些聰明的/不希望的黑客)
嗯做簡短的故事變得很長:)
問候
就像一個魅力,謝謝! – joacar
我正要打開一個問題關於這一點,謝謝! – MusuNaji