我正在尝试通过Unity IoC注册通用接口/实现,但ViewModel中的构造函数参数会抛出无效的强制转换异常,我无法弄清楚原因。
我有一个界面,所有模型都实现:
public interface IEntity {}
典型的模型如下所示:
public class Dashboard: IEntity { .... }
我有一个数据库服务,可以是任何模型类型,也可以是相关的接口,例如:
public interface IDbService<T> where T: IEntity { .... }
public class DbService<T> where T : IEntity, IDbService<T> { .... }
容器注册如下所示:
container.RegisterType(typeof(IDbService<>), typeof(DbService<>));
到目前为止。
然而,当我尝试将其加载到我的ViewModel类中时,我得到了一个无效的强制转换异常,我在构造函数上的实现,为了论证,在DashboardPageViewModel中,如下所示:
private readonly IDbService<Dashboard> _dbService;
public DashboardPageViewModel(IDbService<Dashboard> dbService)
{
_dbService = dbService;
}
这引发了异常。
为什么我不能在这方面投射仪表板?在我注册类型之后尝试解决演员表也不起作用。
答案 0 :(得分:2)
该类已被错误定义。
在
id
public class DbService<T> where T : IEntity, IDbService<T> { .... }
只有DbService<T>
来自T
以及IEntity
您需要从IDbService<T>
接口派生类,然后应用泛型类型约束。
IDbService<T>