2011-12-27 4 views
1

В настоящее время я изучаю .NET и C#, поэтому я довольно новичок в этом, и мне нужно создать «контактную книгу» с сервером и клиентом. Я создал интерфейс, используемый сервером, который описывает операции, доступные для этой книги контактов, как показано ниже:Загрузите интерфейс из сборки и используйте его методы

bool AjouterContact(string num, string nom, string prenom, string mail, string telephone); 
bool SupprimerContact(string num); 
bool ModifierContact(string num, string nom, string prenom, string mail, string telephone); 
List<string[]> RecupererContacts(); 

я использовал для обозначения .dll этого интерфейса в моем клиенте, и она работала хорошо, но сейчас мне нужно загрузить этот .dll все динамически. Это то, что я делаю:

Assembly a = Assembly.LoadFrom("../../../RemotingInterfaces/bin/Debug/RemotingInterfaces.dll"); 
Module[] modules = a.GetModules(); 
Module module = modules[0]; 
Type[] types = module.GetTypes(); 
foreach (Type type in types) 
{ 
    Console.WriteLine(" Le type {0} a cette (ces) methode (s) : ", type.Name); 
    Console.WriteLine("Type information for:" + type.FullName); 
    Console.WriteLine("\tIs Class = " + type.IsClass); 
    Console.WriteLine("\tIs Enum = " + type.IsEnum); 
    Console.WriteLine("\tAttributes = " + type.Attributes); 
    MethodInfo[] mInfo = type.GetMethods(); 
    foreach (MethodInfo mi in mInfo) 
     Console.WriteLine(" {0}", mi); 
} 

Это работает и записывает все методы в консоли. Но я хотел бы знать, как использовать эти методы.

Надеюсь, я был достаточно ясен. Опять же, я новичок в .NET и C#, поэтому я действительно не знаю, как это работает.

ответ

1

Используйте метод MethodInfo.Invoke(), чтобы позвонить методу, используя отражение. В вашем примере, который вы опубликовали, у вас уже есть массив методов, хранящихся в mInfo.

При использовании Invoke(), первый аргумент который вы вызываете метод на (то есть, какой объект вы вызываете метод на), а второй аргумент является params array объекта, который обозначают параметры в метод. Если аргументов нет, вы можете пройти null.

+0

Я попробую этот путь и расскажу, как он прошел. Спасибо. –

+0

Это тот метод, который мне нужен, спасибо. –

+0

Удивительный, рад помочь :) – wsanville

3

Интерфейс - это просто контракт, это список свойств и методов, а не фактическая реализация. Интерфейс выглядит примерно в DLL вы работаете с

public interface IJustAListOfThingsToImplement 
{ 
    int GetTheNumberOfStarsInTheSky(); 
} 

На данный момент метод GetTheNumberOfStarsInTheSky() еще не реализованы и не могут быть использованы.

В нижней строке вы можете получить интерфейс, но вы не можете использовать его методы, потому что он еще не определен.

Надеюсь, это поможет.

+0

Но эти методы реализованы на моем сервере в классе RemoteOperation: MarshalByRefObject, RemotingInterfaces.IRemoteOperation. И я использовал эти методы, ссылаясь на .dll в моем клиенте и создавая объект RemotingInterfaces.IRemoteOperation. Тогда мне просто пришлось вызвать remoteOperation.METHODNAME(); Поэтому я думаю, что я смотрю что-то вроде метода MethodInfo.Invoke(), который wsanville ответил ниже. –

Смежные вопросы