2012-01-10 1 views
0
string assembly = "Ektron.Cms.ObjectFactory.dll"; 
string asspath = path + "bin\\" + assembly; 
Assembly run_obj = Assembly.LoadFrom(@asspath); 
paraObj[0] = run_obj.GetType(
    "Ektron.Cms.Search.SearchContentProperty", 
    true, 
    true 
).GetProperty("Language"); 

string equalExp = "Ektron.Cms.Search.Expressions.EqualsExpression"; 
Type objclass = run_obj.GetType(equalExp, true, true);  
object objObj = Activator.CreateInstance(objclass, paraObj); 

Activator.CreateInstance(objclass, paraObj) выдает ошибку:C# Отражение - Тип ошибки

System.Reflection.RuntimeParameterInfo can't be implicitly convert into Ektron.Cms.Search.Expresions.PropertyExpression

+0

Что такое 'paraObj' в приведенном выше фрагменте кода? – abhilash

+0

@ABKolan Объект [] ' –

ответ

1

Значение, сохраненное в paraObj[0] имеет тип RuntimeParameterInfo, в то время как конструктор для EqualsExpression ожидает, что объект типа PropertyExpression. Вы должны убедиться, что типы объектов в paraObj могут быть привязаны к подходящему конструктору для Activator, чтобы иметь возможность создавать экземпляр нового объекта.

Для решения проблемы необходимо создать экземпляр PropertyExpression и использовать это в качестве первого элемента в вашем paraObj массиве:

string assembly = "Ektron.Cms.ObjectFactory.dll"; 
string asspath = path + "bin\\" + assembly; 
Assembly run_obj = Assembly.LoadFrom(@asspath); 

PropertyInfo propertyInfo = run_obj.GetType("Ektron.Cms.Search.SearchContentProperty", true, true).GetProperty("Language"); 
PropertyExpression propertyExpression = new PropertyExpression(propertyInfo); // create the property expression here, I am unsure how to instantiate it. 
paraObj[0] = propertyExpression; 
paraObj[1] = longValue; 

string equalExp = "Ektron.Cms.Search.Expressions.EqualsExpression"; 
Type objclass = run_obj.GetType(equalExp, true, true);  
object objObj = Activator.CreateInstance(objclass, paraObj); 
+0

EqualsExpression (PropertyExpression, long), свойство long приемлемо, а выбор значения PropertyExpression с помощью отражения неприемлем для CreateInstance. Просьба дать некоторое решение. –

+0

@ VinodKannan ответ обновлен. –

0

Вы не поставляющей типа конструктора ожидает от вашего кода, это ясно, что вы проходите PropertyInfo.

Если вам нужно значение из собственности PropertyInfo наведен вам придется использовать PropertyInfo.GetValue

Я спекулируя (как у меня нет кода Ektron) из фрагмента кода, вы должны сделать что-то похожее на это -

var propInfo = run_obj.GetType(
        "Ektron.Cms.Search.SearchContentProperty", 
        true,true).GetProperty("Language"); 

paraObj[0] = propInfo.GetValue(null,null) //depending on the requirement