簡體   English   中英

Caliburn Micro Update從1.4到1.5-> IoC.Get <>不再與Lazy <>一起使用

[英]Caliburn Micro Update from 1.4 to 1.5 -> IoC.Get<> does not work with Lazy<> anymore

我現有的代碼可以與Caliburn Micro 1.4一起編譯並正常工作:

private static readonly Lazy<IShell> shellLazy = new Lazy<IShell>(IoC.Get<IShell>, true);

我刪除了1.4版本,並通過NuGet 1.5版本進行安裝,並且沒有更改任何內容,此行現在引發錯誤:

錯誤1'System.Lazy.Lazy(System.Func,System.Threading.LazyThreadSafetyMode)'的最佳重載方法匹配具有一些無效的參數C:\\ Users \\ User \\ Documents \\ Visual Studio 2012 \\ Projects \\ Arnova \\ Src \\ CShellCore \\ Shell.cs 35 58 CShellCore

我發現擺脫此錯誤的唯一方法是完全避免使用Lazy <>:

private static readonly IShell shellLazy = IoC.Get<IShell>();

我已經搜索了與IoC.Get <>和Lazy <>相關的任何內容,以及從1.4到1.5可能更改的內容,找不到任何解釋這些版本之間在Caliburn Micro中發生了什么更改以及如何解決此問題的信息。

我認為您的問題是IoC.Get<T>是返回T類型實例的static方法,換句話說,它不是 Func<T>因此要解決此問題,您將必須像下面這樣修改代碼:

private static readonly Lazy<IShell> shellLazy = new Lazy<IShell>(() => IoC.Get<IShell>(), true); 

這就是導致編譯錯誤的原因,因為Lazy<>類型上沒有接受IShell實例的構造函數。

找到了,不知道為什么需要這種方式更改? Intellisense顯示1.4和1.5 caliburn micro版本的信息相同,這些功能看起來期望使用相同的參數。

到目前為止,這似乎可行:

private static readonly Lazy<IShell> shellLazy = new Lazy<IShell>(() => { return IoC.Get<IShell>(); }, true);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM