我有以下课程:
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.dll中发生了
System.MissingMethodException
类型的未处理异常 附加信息:未找到类型XXXXX.MyQueryTranslator
的构造函数
正如您所看到的,我正在通过适当的BindingFlgs
,因此可以实际找到构造函数。
正在调用TranslateExpression<T>
方法:
QueryRequest request = TranslateExpression<QueryRequest>(expression);
我还应该注意,这两个类都在同一个程序集中。
答案 0 :(得分:0)
有些人指出它与错误的重载相匹配。 参数必须是对象数组。
(IExpressionTranslator<T>)Activator.CreateInstance(_translators[typeof(T)],
BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance,
null,
new object[] { _reflectionManager },
null);