1
我有以下信息的層次結構,並希望StructureMap返回我相應的消息處理程序,如下所示(注意:一個處理程序是用於從YMessageBase衍生的所有消息):StructureMap:如何獲得派生消息的基本消息處理程序? (命令處理程序模式)
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來做到這一點?
感謝