1
我公司已拥有这样的铸造实现该接口与泛型类型
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'。这将无法编译,如果任何方法使用'TBaseUser'作为输入位置,当然... –
@JonSkeet谢谢 - 我忽略提及协变 - 我不能使它协变,因为接口使用TBaseUser都返回&输入值。 – Sam
在这种情况下,SomeService根本不实现'IBaseService' –