2

我有以下类定义:

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;
}

并且, and 的类型是and ,_dbC它们的构造函数中需要的类型- 是的,我从. 有什么想法吗?_cDbContextContextGenericRepository.GetType().FullName

4

1 回答 1

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);
于 2012-08-29T02:04:20.903 回答