У меня есть несколько очередей сообщений, в которых есть определенные сообщения.
Я создал классы для этих сообщений, используя xsd.exe.
Я могу получить сообщение синхронно и десериазлизировать его следующим способом:
public oneOfMyTypes DeserializeMessage(XDocument message)
{
var serializer = new XmlSerializer(typeof(oneOfMyTypes));
var entity = (oneOfMyTypes)serializer.Deserialize(message.CreateReader());
return entity;
}
Затем я сохраняю сущность через Fluent NHibernate.
Итак, у меня есть около пяти очередей сообщений, каждый из которых имеет свой тип сообщения.
Мне бы хотелось, чтобы это маленькое приложение для процессора поддерживалось в обслуживании, чтобы добавление большего количества очередей и типов сообщений не стало проблемой.
Итак, у меня есть список имен очередей в моем app.config, который я использую для создания очередей сообщений при запуске, а затем я хочу подключить один метод к событию .ReceiveCompleted всех очередей:
void queue_ReceiveCompleted(object sender, ReceiveCompletedEventArgs e)
{
var queue = (MessageQueue)sender;
var message = queue.EndReceive(e.AsyncResult);
var body = message.Body.ToString();
var xml = XDocument.Parse(body);
var queueName = queue.QueueName;
Type entityType = GetTypeFromQueueName(queueName);
entityType entity = DeserializeMessage<entityType>(xml);
var repository = new LogRepository();
repository.AddEntity<entityType>(entity);
}
private T DeserializeMessage<T>(XDocument message)
{
var serializer = new XmlSerializer(typeof(T));
var entity = (T)serializer.Deserialize(message.CreateReader());
return entity;
}
public Type GetTypeFromQueueName(string queueName)
{
switch (queueName)
{
case "some-message-queue-name":
return typeof (oneOfMyTypes);
}
}
Но когда я пытаюсь передать entityType универсальным методам, я получаю "Тип или имя пространства имен ожидаемое".
Я, вероятно, делаю что-то действительно глупое, но я не могу понять, как это должно работать.
Я пытался использовать динамическое ключевое слово, а также .MakeGenericType, но безуспешно.
Я также посмотрел на:
Но я все еще не получаю ... помощь?