我公司有一个共享库,其代码如下
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>
。