Unity IoC抛出无效的强制转换异常

时间:2018-02-13 19:24:16

标签: c# xamarin.forms unity-container

我正在尝试通过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;
}

这引发了异常。

为什么我不能在这方面投射仪表板?在我注册类型之后尝试解决演员表也不起作用。

1 个答案:

答案 0 :(得分:2)

该类已被错误定义。

id

public class DbService<T> where T : IEntity, IDbService<T> { .... } 只有DbService<T>来自T以及IEntity

的类型约束

您需要从IDbService<T>接口派生类,然后应用泛型类型约束。

IDbService<T>