我的公司有一个共享库,其中包含这样的代码
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
-iterface 需要是协变的:
interface IBaseService<out T>
这样,您可以将IBaseService<User>
的实例分配给IBaseService<BaseUser>
。