.NET6中反射POCO类创建实例时CS0118错误的修复咨询
修复CS0118错误的解决方案
错误原因
CS0118错误是因为你试图将运行时动态获取的类型(entityType)作为编译时泛型方法的类型参数使用。GetInstance<T>是编译时确定类型的泛型方法,无法直接接受运行时才明确的类型参数。
修复步骤
直接使用ServiceLocator.Current.GetInstance的非泛型重载版本,传入你已经通过MakeGenericType创建好的泛型仓储类型repositoryType即可:
var entityType = Assembly.Load("system.domain").GetTypes().Where(a => a.Name == "AccountType").FirstOrDefault(); var repositoryType = typeof(infra.IRepository<>).MakeGenericType(entityType); // 使用非泛型重载获取实例,避免编译时类型参数错误 var r = ServiceLocator.Current.GetInstance(repositoryType);
后续类型处理
如果需要对获取到的仓储实例进行操作,由于其类型是动态的,有两种常见处理方式:
- 若你的仓储接口有一个非泛型的基接口(比如
IRepository),可以将r转换为该基接口类型:var repository = r as IRepository; - 若不需要强类型约束,可使用
dynamic类型:dynamic repository = r; // 直接调用仓储方法,如 repository.GetAll();
内容的提问来源于stack exchange,提问作者denli8
相关产品推荐
相关产品推荐

