Загрузите интерфейс из сборки и используйте его методы - PullRequest
1 голос
/ 27 декабря 2011

В настоящее время я изучаю .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 #, поэтому я не знаю, как это работает.

Ответы [ 2 ]

3 голосов
/ 27 декабря 2011

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

public interface IJustAListOfThingsToImplement
{
  int GetTheNumberOfStarsInTheSky();
} 

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

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

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

1 голос
/ 27 декабря 2011

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...