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' –