![](/img/trans.png)
[英]How to fix Activator.CreateInstance failing with MissingMethodException “Constructor on type not found”?
[英]Activator.CreateInstance() - Constructor not found
我有以下課程:
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);
我還要注意,兩個類都在同一程序集中。
正如某些人指出的那樣,它匹配了錯誤的重載。 參數必須是對象數組。
(IExpressionTranslator<T>)Activator.CreateInstance(_translators[typeof(T)],
BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance,
null,
new object[] { _reflectionManager },
null);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.