我公司有一个共享库,其代码如下
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)
{
}
}
我想做的是什么?
答案 0 :(得分:2)
您的IBaseService
- 表面必须为covariant:
interface IBaseService<out T>
这样您就可以将IBaseService<User>
的实例分配给IBaseService<BaseUser>
。