我有以下课程:
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);
}
//...
}但是,我得到了以下错误:
System.MissingMethodException类型的未处理异常发生在mscorlib.dll中 附加信息:未找到XXXXX.MyQueryTranslator类型的构造函数
如您所见,我正在传递批准的BindingFlgs,以便实际找到构造函数。
调用TranslateExpression<T>方法的方式如下:
QueryRequest request = TranslateExpression<QueryRequest>(expression);我还应该指出,两个类都在同一个程序集中。
发布于 2016-12-07 08:24:59
正如一些人指出的那样,这与过载是不相称的。参数必须是一个对象数组。
(IExpressionTranslator<T>)Activator.CreateInstance(_translators[typeof(T)],
BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance,
null,
new object[] { _reflectionManager },
null);https://stackoverflow.com/questions/30789502
复制相似问题