我有以下类定义:
public abstract class ControllerBase<T, V> : Controller where T : EntityBase<T> where V : GenericRepository<T>
然后在课堂上我有以下代码:
private V _repo;
...
_repo = (V)Activator.CreateInstance(typeof(V), _dbC, _c);
这个编译得很好。然后我有一个具有以下定义的类:
public class SecurityRoleController : ControllerBase<SecurityRole, GenericRepository<SecurityRole>>
那也编得很好。但是,当我尝试在浏览器中点击/ SecurityRole时,我得到Constructor on type GenericRepository'1 not found
的异常。 (请注意,它实际上是异常中的反引号,但会破坏SO格式。)尽管GenericRepository<T>
有一个公共构造函数,当我尝试直接创建类的实例时,它的工作正常。
任何人都知道如何正确构建类的通用实例?
TIA,
本吉
编辑:
GenericRepository
的构造函数:
public GenericRepository(DbContext dbContext, Context c, string[] includes = null)
{
_dbContext = dbContext;
_c = c;
if (includes != null)
{
_includes = includes;
}
return;
}
并且_dbC
和_c
的类型属于DbContext
和Context
,GenericRepository
在其构造函数中需要的类型 - 是的,我从.GetType().FullName
得到了这些。有什么想法吗?
答案 0 :(得分:4)
您的构造函数声明了三个参数。但是你对Activator.CreateInstance
的调用只传递了两个参数 - 它没有传入最后一个参数的值(它拥有一个默认值 - string[] includes = null
):
_repo = (V)Activator.CreateInstance(typeof(V), _dbC, _c);
CreateInstance
要求指定所有参数 - 它将方法 - 重载解析算法基于您传递的参数,并且不考虑默认参数的可能性。因此,要修复,只需将null
(默认值)作为最后一个参数传递:
_repo = (V)Activator.CreateInstance(typeof(V), _dbC, _c, null);