У меня есть следующая иерархия сообщений, и я хочу, чтобы StructureMap возвращал мне соответствующий обработчик сообщений, как показано ниже (примечание: один обработчик для всех сообщений, полученных из YMessageBase):
abstract class XMessageBase { ... }
class AMessage : XMessageBase { ... }
abstract class YMessageBase { ... }
class BMessage: YMessageBase { ... }
AMessageHandler : AbstractMessageHandler<AMessage> { ... }
YMessageBaseHandler : AbstractMessageHandler<YMessageBase> { ... }
Я настраиваю StructureMap следующим образом:
Scan(cfg =>
{
cfg.TheCallingAssembly();
cfg.IncludeNamespace("Namespace.With.Above.Types");
cfg.ConnectImplementationsToTypesClosing(typeof(AbstractMessageHandler<>));
cfg.WithDefaultConventions();
});
И я пытаюсь обрабатывать такие сообщения:
ProcessMessage(object message)
{
var messageType = message.GetType();
var handlerType = typeof(AbstractMessageHandler<>).MakeGenericType(messageType);
var handler = (IMessageHandler)ObjectFactory.Container.GetInstance(handlerType);
handler.Handle(message);
}
Проблема в , в случае BMessage
, этот подходзапрашивает StructureMap для AbstractMessageHandler<BMessage>
, когда ему действительно нужно найти AbstractMessageHandler<YMessageBase>
... в результате он не находит обработчик.
Может кто-нибудь дать какой-нибудь совет о том, как использовать StructureMap для этого?
Спасибо