хорошо, вот сделка, я забираю все методы из веб-сервиса и предоставляю способ их протестировать. пока что мы показываем их методы, а некоторые из них имеют дело только с целыми числами и строками. об этой части заботятся. (мы можем правильно вызывать методы и анализировать результаты)
проблема в том, что некоторые из этих параметров, необходимых для вызова метода, являются классами, которые определены где-то в веб-сервисе, и у нас нет возможности узнать, что это такое. единственное, что мы знаем, это то, что эти классы состоят только из строк и целых чисел. (Яй)
позвольте мне сказать, что я ищу создание экземпляра типа «Агент» во время выполнения.
пока у меня есть доступ к службе, которая была загружена во время выполнения, которая находится в другом классе. это работает просто отлично
Класс прокси:
.
.
.
CompilerParameters parms = new CompilerParameters(assemblyReferences);
CompilerResults results = provider1.CompileAssemblyFromDom(parms, unit1);
// Checks For Errors
// add the web service method to our list of methods to test
//--------------------------------the following variables are class level ---------------------------
object service = results.CompiledAssembly.CreateInstance(serviceName);
Type types = service.GetType();
List<ConstructorInfo> listConstructors = (service as Types).GetType().GetConstructors().ToList();
List<MethodInfo> listMethods = types.GetMethods().ToList();
listMethods.Where(mi => mi.GetCustomAttributes(false).
Where(at => at.GetType() == typeof(SoapDocumentMethodAttribute)).
Count() > 0).ToList().ForEach(methodsInfo =>{
//methods to test is a list of a wrapper class for methodInfos
MethodsToTest.Add(new MethodTest(methodsInfo));
});
сейчас, в другом классе, я работаю в. Я пытаюсь получить объект нужного нам типа, вызвав метод:
Я пытаюсь создать экземпляр этого класса "Агент"
private void populateParameterListView(){
if (funcLBox.SelectedItem != null)
{
resultTBlock.Text = String.Empty; //our textbox
paramLView.Items.Clear();
ParameterUserInput pui = null; //a wrapper class for parameterinfo
Proxy.MethodsToTest[index].info.ToList().ForEach(param =>
{
pui = new ParameterUserInput(param);
paramLView.Items.Add(pui);
//this will check if it is a system type or a custom type
if (!pui.ParameterType.IsSealed)
{
// this is where we want to be. nevermind the code above this
//temp in this case is "Agent"
string temp = Proxy.MethodsToTest[index].info.GetValue(0).ToString().Split(' ')[0];
MemberInfo[] mia = Proxy.types.GetMember(temp);
//get an object of the type we need by invoking the method
}
});
}
На данный момент он пытается найти членов через 'типы', объявленные в прокси, выполняя для него элемент get. проблема в том, что я уверен, что я все еще смотрю в неподходящее место для этих участников. Кто-нибудь может увидеть, что я делаю не так? я знаю, что это как-то связано с тем, что я на самом деле повторяю над