C# 无法隐式转换惰性<;类别>;懒惰<;界面>;

C# 无法隐式转换惰性<;类别>;懒惰<;界面>;,c#,interface,initialization,lazy-initialization,C#,Interface,Initialization,Lazy Initialization,我正在编写一个MVC 5 internet应用程序,我有一个问题,关于如何使用接口和惰性初始化 以下是相关的类定义: public class WebAPITokenService1_0 : IWebApiTokenService 下面是我使用声明中的接口编写的代码: Lazy<WebAPITokenService1_0> webAPITokenService1_0; Lazy<IWebApiTokenService> webAPITokenService1_0;

我正在编写一个MVC 5 internet应用程序,我有一个问题,关于如何使用
接口
惰性初始化

以下是相关的类定义:

public class WebAPITokenService1_0 : IWebApiTokenService
下面是我使用声明中的接口编写的代码:

Lazy<WebAPITokenService1_0> webAPITokenService1_0;
Lazy<IWebApiTokenService> webAPITokenService1_0;
> 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\1_0\WebService1_0Controller.cs
声明:

Lazy<WebAPITokenService1_0> webAPITokenService1_0;
Lazy<IWebApiTokenService> webAPITokenService1_0;
> 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\1_0\WebService1_0Controller.cs
我已经看过了,但看不到关于上述情况的任何信息


我可以将
接口
惰性初始化
一起使用吗?如果可以,我的上述代码有什么不正确的地方吗?

惰性
不支持,因此您必须在声明和初始化中使用完全相同的类型。

.NET仅支持接口和委托的通用差异,而
Lazy
是一个类。因此,您不能将
Lazy
实例分配给
Lazy
变量

但是,通过使用接受工厂委托作为参数的
Lazy
构造函数,您可以创建一个
Lazy
实例,该实例包含
派生的
实例作为其
属性:

Lazy<Base> lazy1 = new Lazy<Base>(() => new Derived(args1));
Lazy<Base> lazy2 = new Lazy<Base>(() => GetDerived(args2));
Lazy-lazy1=new-Lazy(()=>new-Derived(args1));
Lazy lazy2=新的Lazy(()=>GetDerived(args2));

Lazy WebAPITokeService1_0=新的Lazy(()=>新的WebAPITokeService1_0())谢谢。我会接受这个答案,如果你想发布一个答案。好答案。我很难理解OP想要完成什么。