У меня есть следующий класс:Activator.CreateInstance() - Конструктор не найден
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);
}
//...
}
Однако , Я получаю следующую ошибку:
An unhandled exception of type
System.MissingMethodException
occured in mscorlib.dll
Additional information: Constructor on typeXXXXX.MyQueryTranslator
not found
Как вы можете видеть, я прохожу соответствующий BindingFlgs
, поэтому конструктор можно найти.
TranslateExpression<T>
метод вызывается так:
QueryRequest request = TranslateExpression<QueryRequest>(expression);
Следует также отметить, что оба класса находятся в одной и той же сборки.
Код, который вы указали, использует перегрузку «CreateInstance», которая не существует. вы имели в виду «new [] {_reflectionManager}' как 4-й параметр? –
@LucasTrzesniewski Я не могу поверить, что это было! Перегрузка фактически существует, потому что она скомпилирована правильно. Пожалуйста, напишите как ответ, поэтому я могу закрыть этот вопрос. –
Странно. Очевидно, что это соответствует некоторой перегрузке. Что он делает в этом случае? – Tim