Activator.CreateInstance() - 找不到构造函数
本文关键字:找不到 构造函数 CreateInstance Activator | 更新日期: 2023-09-27 17:55:19
我有以下类:
internal class MyQueryTranslator : ExpressionVisitor, IExpressionTranslator<QueryRequest>
{
private IReflectionManager _reflectionManager;
internal MyQueryTranslator(IReflectionManager reflectionManager)
{
this._reflectionManager = reflectionManager;
}
//....
}
同时,在另一个类中,我尝试使用Activator.CreateInstance()
方法实例化这个类:
internal class MyPersistenceStrategy<E> : IAsyncPersistenceStrategy<E>
where E : class, IPersistableEntity
{
private IReflectionManager _reflectionManager;
private static readonly Dictionary<Type, Type> _translators;
static MyPersistenceStrategy()
{
_translators = new Dictionary<Type, Type>()
{
{ typeof(QueryRequest), typeof(MyQueryTranslator) }
}
}
private T TranslateExpression<T>(Expression expression)
{
if(_translators.ContainsKey(typeof(T))
throw new InvalidOperationException(String.Format("There is no translator for: {0}", typeof(T).Name);
IExpressionTranslator<T> translator =
(IExpressionTranslator<T>)Activator.CreateInstance(_translators[typeof(T)],
BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance,
null,
_reflectionManager,
null);
return translator.Translate(expression);
}
//...
}
但是,我收到以下错误:
mscorlib 中发生了
System.MissingMethodException
类型的未处理异常.dll
其他信息:找不到类型XXXXX.MyQueryTranslator
的构造函数
如您所见,我正在传递适当的BindingFlgs
,以便实际找到构造函数。
TranslateExpression<T>
方法的调用方式如下:
QueryRequest request = TranslateExpression<QueryRequest>(expression);
我还应该注意,这两个类位于同一个程序集中。
正如一些人指出的那样,它匹配了错误的重载。参数必须是对象数组。
(IExpressionTranslator<T>)Activator.CreateInstance(_translators[typeof(T)],
BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance,
null,
new object[] { _reflectionManager },
null);