簡體   English   中英

Activator.CreateInstance()-找不到構造函數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM