无法将 Lazy<Class> 隐式转换为 Lazy<Interface>
Cannot implicitly convert Lazy<Class> to Lazy<Interface>
我正在编写一个 MVC 5 互联网应用程序,我有一个关于使用 interface
和 Lazy<T> initialization
的问题。
这里是有问题的 class 定义:
public class WebAPITokenService1_0 : IWebApiTokenService
这是我的代码,它在声明中使用了接口:
声明:
Lazy<WebAPITokenService1_0> webAPITokenService1_0;
初始化:
webAPITokenService1_0 = new Lazy<WebAPITokenService1_0>();
这是相同的代码,但使用了一个接口:
声明:
Lazy<IWebApiTokenService> webAPITokenService1_0;
初始化:
webAPITokenService1_0 = new Lazy<WebAPITokenService1_0>();
这是在声明中使用 interface
时的错误:
> Cannot implicitly convert type
> 'System.Lazy<CanFindLocation.Services.AndroidWebAPI._1_0.WebAPITokenService1_0>'
> to
> 'System.Lazy<CanFindLocation.Interfaces.WebService.IWebApiTokenService>' E:\CanFindLocation\MVC\CanFindLocation\CanFindLocation\Controllers\AndroidWebAPI_0\WebService1_0Controller.cs
我看过Lazy Initialization,但是看不到关于上述情况的任何信息。
我可以将 interface
与 Lazy<T> initialization
一起使用吗?如果可以,我上面的代码有什么不正确的地方?
Lazy<T>
不支持covariance,所以必须在声明和初始化时使用完全相同的类型。
.NET 仅支持接口和委托的泛型变体,Lazy<T>
是 class。所以你不能将 Lazy<Derived>
实例分配给 Lazy<Base>
变量
但是,您可以使用接受工厂的 Lazy<T>
构造函数创建一个包含 Derived
实例作为其 Value
属性 的 Lazy<Base>
实例委托作为参数:
Lazy<Base> lazy1 = new Lazy<Base>(() => new Derived(args1));
Lazy<Base> lazy2 = new Lazy<Base>(() => GetDerived(args2));
我正在编写一个 MVC 5 互联网应用程序,我有一个关于使用 interface
和 Lazy<T> initialization
的问题。
这里是有问题的 class 定义:
public class WebAPITokenService1_0 : IWebApiTokenService
这是我的代码,它在声明中使用了接口:
声明:
Lazy<WebAPITokenService1_0> webAPITokenService1_0;
初始化:
webAPITokenService1_0 = new Lazy<WebAPITokenService1_0>();
这是相同的代码,但使用了一个接口:
声明:
Lazy<IWebApiTokenService> webAPITokenService1_0;
初始化:
webAPITokenService1_0 = new Lazy<WebAPITokenService1_0>();
这是在声明中使用 interface
时的错误:
> Cannot implicitly convert type
> 'System.Lazy<CanFindLocation.Services.AndroidWebAPI._1_0.WebAPITokenService1_0>'
> to
> 'System.Lazy<CanFindLocation.Interfaces.WebService.IWebApiTokenService>' E:\CanFindLocation\MVC\CanFindLocation\CanFindLocation\Controllers\AndroidWebAPI_0\WebService1_0Controller.cs
我看过Lazy Initialization,但是看不到关于上述情况的任何信息。
我可以将 interface
与 Lazy<T> initialization
一起使用吗?如果可以,我上面的代码有什么不正确的地方?
Lazy<T>
不支持covariance,所以必须在声明和初始化时使用完全相同的类型。
.NET 仅支持接口和委托的泛型变体,Lazy<T>
是 class。所以你不能将 Lazy<Derived>
实例分配给 Lazy<Base>
变量
但是,您可以使用接受工厂的 Lazy<T>
构造函数创建一个包含 Derived
实例作为其 Value
属性 的 Lazy<Base>
实例委托作为参数:
Lazy<Base> lazy1 = new Lazy<Base>(() => new Derived(args1));
Lazy<Base> lazy2 = new Lazy<Base>(() => GetDerived(args2));