我公司有一个共享库,其代码如下

public interface IBaseService<TBaseUser> where TBaseUser : BaseUser
{
   // snip
}

public class User : BaseUser
{
    // snip
}

public class SomeService : IBaseService<User>
{

}


各种应用程序都使用此共享代码。我正在尝试编写一个在其ctor中包含IBaseService<BaseUser>的基本控制器。

public class BaseController : Controller
{
    public BaseController(IBaseService<BaseUser> service)
    {
    }
}


库级别的代码完全按照我的预期工作,但是当我尝试从使用中的应用程序中使用它并传入派生类型(即Service类型)时,它会因无效的强制转换而失败。

public class MyController : BaseController
{
    public MyController(SomeService service) : base(service)
    {
    }
}


我想做的事可能吗?

最佳答案

您的IBaseService界面必须为covariant

interface IBaseService<out T>

这样,您可以将IBaseService<User>的实例分配给IBaseService<BaseUser>

10-06 14:36