Caliburn Micro从1.4更新到1.5->;IoC.Get<>;不适用于Lazy<>;不再
本文关键字:gt lt 不适用 Get 适用于 不再 Lazy IoC 更新 Caliburn Micro | 更新日期: 2023-09-27 18:21:18
我有现成的代码,可以很好地编译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相关的任何内容。获取<>和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微型版本显示了相同的信息,这些函数看起来期望相同的参数。
到目前为止,这似乎是有效的:
private static readonly Lazy<IShell> shellLazy = new Lazy<IShell>(() => { return IoC.Get<IShell>(); }, true);