Динамическое приведение и тип сообщения - PullRequest
2 голосов
/ 01 апреля 2011

У меня есть этот объект, который я сериализирую и отправляю на сервер по TCP / IP, и мне нужно десериализовать его и запустить его в сообщении правильного типа.Я использую .net 4.

Проблема в том, что объект может быть нескольких разных типов, и мессенджер должен знать тип того, что он отправляет.То, что я хочу сделать, это отправить строку или объект типа, который будет указывать, какой тип основного объекта.Сейчас я делаю это, но это работает только для одного типа:

public void generic_Obj(Object obj)
{
     //Entity is a class that I define elsewhere
     //I'm using the Galasoft MVVM Light messenger
     Messenger.Default.Send<Entity>((Entity)obj, "token");
}

Я хочу сделать что-то подобное, используя отражение:

public void gen_Obj(Object obj, Type genType, string token)
{
     //this doesn't work btw
     Messenger.Default.Send<genType>((genType)obj, token);
}

У меня естьперепробовал все разные методы динамического приведения и тому подобное, используя отражение, некоторые из них работали, но моя настоящая проблема - найти что-то, что можно поставить между этими <> скобками в вызове мессенджера.

Ответы [ 2 ]

1 голос
/ 01 апреля 2011

Если вы генерируете MethodInfo для метода Send с использованием отражения, вы можете использовать MethodInfo.MakeGenericMethod для создания метода с определенным типом, определенным genType.

* 1007.* Как только вы это сделаете, MethodBase.Invoke может использоваться для вызова метода с вашими аргументами.
0 голосов
/ 21 апреля 2011

Вы также можете сделать это в .net 4, используя dlr вместо отражения. Impromptu-интерфейс с открытым исходным кодом имеет вспомогательный метод, который делает его легким .

public void gen_Obj(Object obj, Type genType, string token)
{
     Impromptu.InvokeMemberAction(Messenger.Default,"Send".WithGenericArgs(genType),obj,token)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...